phython在file同時寫入兩個_輕松支撐百萬級數據點寫入 京東智聯云時序數據庫HoraeDB架構解密...

本文將通過對時序數據的基本概念、應用場景以及京東智聯云時序數據庫HoraeDB的介紹,為大家揭秘HoraeDB的核心技術架構和解決方案。

ed78c20165f35df700a2b5363e469231.png

首先我們來了解下時序數據庫的基本概念。時序數據庫全稱時間序列數據庫,主要用于處理帶時間標簽的數據,帶時間標簽的數據也稱為時序數據。

時序數據庫是一種高性能、低成本、穩定可靠的在線時序時空數據庫服務,提供高效讀寫、高壓縮比存儲、時序數據插值及聚合計算等服務,廣泛應用于服務和服務器監控系統、物聯網(IoT)設備監控系統、生產安全監控系統和電力檢測系統等行業場景。此外,它還能提供時空場景的查詢和分析能力。

時序數據庫中存儲的是時序數據,時序數據的結構特點和簡單舉例如下:

728255e51b32a76e89a0d7f3d9ea0377.png

上圖展示的是一個服務和時間點緊密關聯的流量變化數據,數據如下:

702b14e11fb3b7684beb33027ce51fbd.png
  • Metric:時序數據的指標名稱;
  • Tags:對時序數據指標進行補充描述的標簽,描述清楚數據是什么、來源等,方便后期對數據進行篩選和聚合計算等;
  • Dps:時序數據的數據點,是一系列隨著時間變化的值,分為時間戳和具體的value兩個部分。

b962960b2cfbd07a99e66f43ec5bdb3a.png
  • 證券交易:可以用時序數據庫來保存隨著時間波動的交易價格等數據;
  • 氣溫變化情況:可以用時序數據庫存儲氣溫變化的數據,便于記錄和分析某個地區的氣溫變化波動規律;
  • 服務器監控:通過對大規模應用集群和機房設備的數據采集,存儲到時序數據庫中,就可以實時關注設備運行狀態、資源利用率和業務趨勢,實現數據化運營和自動化開發運維;
  • 物聯網傳感器:物聯網設備無時無刻不在產生海量的設備狀態數據和業務消息數據,這些數據有助于進行設備監控、業務分析預測和故障診斷;
  • 網站/服務監控數據:通過日志或者其他方式對原始指標數據進行采集和實時計算,最后將實時計算的結果數據存儲到時序數據庫,實現對網站和服務的監控和分析。

aec163b2a4dee4da6297faaafdd018d4.png
  • 時序數據的寫入:每秒需要有百萬至千萬量級的時序數據點寫入,并且寫入流量沒有低峰期和高峰期的區分,所以時序數據庫需要解決好如何7*24小時支持好百萬甚至上千萬級的時序數據寫入問題;
  • 時序數據的讀取:如何低延遲解決好單個請求讀取百萬級數據點的查詢以及幾十萬級別數據計算和聚合問題;
  • 成本問題:時序數據數據量級較大,且在業務上可能至少需要存儲一年以上的歷史數據,以便于后期來對數據進行分析和處理,所以時序數據庫需要解決好存儲成本的問題。

0c9a7ae1a3f4cdfc7ae02f048e0d1821.png

HoraeDB是京東智聯云自研的一款時序數據庫,在數據的寫入協議上完全兼容OpenTSDB,數據的查詢上兼容OpenTSDB restful API和PromQL。

HoraeDB主要有以下特點:

  • 高性能:支持數據批量異步寫入,高并發查詢以及強大的數據計算和聚合能力;
  • 高可用:數據存儲分布式架構,副本數和數據的一致性級別靈活可調;可以根據需要,對數據的寫入做多AZ雙寫和HA查詢等;
  • 使用成本低:豐富的數據類型,REST接口、數據寫入查詢均使用json格式,并且接口和協議上完全兼容OpenTSDB和PromQL,歷史服務前移學習成本較低;
  • 兼容開源生態:兼容OpenTSDB和PromQL協議以及開源的Kibana組件,可以方便的使用開源生態中已存在的工具和組件對時序數據進行查詢、分析和展示等。

0c9a7ae1a3f4cdfc7ae02f048e0d1821.png

58afea942b56b6b2798ad5ccf3984c47.png

HoraeDB在整體架構上從上往下進行分層,大概可以分為以下幾層:

  • Http-Server層:主要負責HTTP服務端口的監聽、接收以及響應用戶的請求;
  • 協議處理層:這層是負責對接各種已有的開源組件的協議。主要是包括OpenTSDB-Parser、Prometheus-Adapter、Remote-Read、Remote-Write等幾個組件:
    ◆OpenTSDB-Parser:負責對當前開源的OpenTSDB的請求協議進行解析和處理,包括查詢請求和響應請求;
    ◆ Prometheus-Adapter:對PromQL查詢語法進行解析,解析成HoraeDB內部標準的查詢協議;
    ◆ Remote-Read:實現Prometheus的Remote-Read模式,可以使用Prometheus來查詢HoraeDB中的數據,具體配置使用方式可以參考Prometheus配置說明;
    ◆ Remote-Writer:實現Prometheus的Remote-Write模式,可以在生產環境中將HoraeDB作為Prometheus的分布式集群存儲解決方案,將Prometheus中采集到的數據寫入到HoraeDB。具體配置使用方式可以參考Prometheus配置說明。
  • HoraeDB協議層:包括HoraeDB-PutReq和HoraeDB-QueryReq,這一層主要是定義好HoraeDB自身寫入的數據的結構和查詢請求的結構;
  • 處理引擎層:包括了write-engine和query-engine,這層是分別進行數據寫入和查詢的處理邏輯;
  • 數據隊列:這一層主要是針對數據寫入而言的,數據要寫入到底層存儲,會先寫到隊列中,然后消費端根據配置文件的指定的后端,進行數據的處理;
  • 存儲Client層:適配各種各樣的三方存儲組件,負責數據的持久化存儲處理,目前實現了ES-Client、Cassandra-Client、Cache-Client、Local-Storage:
    ◆ ES-Client:負責將時序數據中的Meta部分信息寫入到ES進行存儲;
    ◆ Cassandra-Client:負責將時序數據中的數據點寫入到Cassandra中進行持久化存儲;
    ◆ Cache-Client:將新寫入的熱點時序數據寫入到高速緩存組件,對熱點數據進行Cache。
  • 數據存儲層
    ◆ Cassandra:存儲時序數據中的數據點;
    ◆ ES:存儲時序數據中的Meta信息;
    ◆ TS-Cache:自研的時序數據Cache系統,內部使用delta-delta和XOR編碼方式對時序數據的時間戳和值進行壓縮,可以存儲最近三小時的熱點時序數據。

166ae83ad51035287ce53b7284d6ae33.png

e211e3394fcec1d7677d8cd5c480361a.png

HoraeDB在底層數據存儲將時序數據拆分成兩部分進行存儲,一部分是meta數據,這部分數據主要是對時序數據進行描述的,描述了一條時間序列是什么,來自于哪里;另外一部分是時序數據點,包括時間戳和具體的值,這部分數據是會隨著時間變化,周期性上報的部分。例如下面一條數據:

17ee7788b410646e142d8f426fd9220a.png
  • Meta部分包括了name、tags、additionTag等三個部分,對一條時間線進行了描述;
  • 數據點部分包括了timeStamp和value,是具體的時序數據點。

它們各自的特點如下:

  • Meta
    ◆ 寫入后,基本不會有變更;
    ◆ 需要支持多維度,多種方式進行數據篩選,比如Tag精確匹配,前綴搜索、正則匹配等多種搜索;
    ◆ 數據量相對小。
  • 時序數據點
    ◆ 周期性匯報;
    ◆ 和時間戳強關聯;
    ◆ 需要支持按照時間范圍進行數據篩選;
    ◆ 數據量大。

根據以上特點,我們在數據持久化存儲中,針對Meta和時序數據點,分別選擇了Elasticsearch和Cassandra來進行數據存儲。

Elasticsearch

Elasticsearch是一個基于RESTful web接口并且構建在Apache Lucene之上的開源分布式搜索引擎。

同時ES還是一個分布式文檔數據庫,其中每個字段均可被索引,而且每個字段的數據均可被搜索,能夠橫向擴展至數以百計的服務器存儲以及處理PB級的數據。可以在極短的時間內存儲、搜索和分析大量的數據。

Cassandra

Cassandra是一套開源分布式NoSQL數據庫系統。具有以下特點:

  • 線性擴展,輕松應對速度、多樣性和復雜性問題:Cassandra是線性擴展,可以根據前臺數據流量輕松確定集群規模;
  • 架構簡單,運維成本低:Cassandra不依賴外部組件,所有必須的操作都集成在Cassandra內部了。同時,由于它是P2P對等架構,無主,環上的節點都是對等的,極度簡化部署及后續運維工作,適合大規模部署;
  • 高可用:Cassandra采用了許多容錯機制。由于Cassandra是無主的,所以沒有單點故障,可以做到不停服滾動升級。這是因為Cassandra可以支持多個節點的臨時失效(取決于群集大小),對集群的整體性能影響可以忽略不計。Cassandra提供多地域容災,允許您將數據復制到其他數據中心,并在多個地域保留多副本。

HoraeDB在Cassandra中的Schema定義:

0b92f71bcc80c96b7ed3b3b8e5bba6db.png
  • 行定位:uuid + partitionKey來唯一定位到一行數據,uuid是根據name + 排序后的Tag來計算出來的,唯一可以表示單個時間序列的ID, partitionKey是由程序來定義的劃分行的字符串,比如按照天來劃分行,那么我們就可以傳入數據時間戳的當天日期;
  • 列定位:每列由數據的時間戳來表示,每個時序點占一列,每列中包含value和createTime字段。value是經過編碼后的數據,createTime是由時序數據點到來的時間計算出的timeUUID來表示,用于支持多版本的特性。

b8fd0ba425b758fe0c294a2c1047ce75.png

業務對于監控數據的使用需求多種多樣,有查最新數據的異常告警,也有查看一整年指標數據的趨勢圖展示,數據量越大查詢耗時就越久,如果放在瀏覽器端處理也要耗費大量的內存。這不但對系統造成了很大的壓力,也給用戶帶來了難以忍受的查詢體驗。鑒于此,我們引入了多級的降采樣機制來應對不同跨度的數據查詢。

ed1f1d8ded35f2c47941b3a0c76bed7b.png

如上圖所示,提前降低采樣算法就是將連續不斷流入的時序數據點來進行分桶,計算出這個桶內的均值、最大值、最小值、總和等,這樣用戶在查詢數據的時候,直接返回合適的采樣數據即可。

為了提供多種粒度的數據,HoraeDB支持對原始數據進行多級降采樣,比如可以將原始數據降采樣成10m和1h粒度的數據。

96dcc3cd3e185559ae6ecadf2c5de972.png

流式抽樣的核心處理思想如上圖所示:在HoraeDB的內存中保存了每個時間序列。每個序列上都維護了當前這個序列的cnt、sum、max、min、last等值,隨著時間的推移,時序數據點源源不斷的流入,相應序列上的cnt、sum、max、last都會進行累加或者值更新,當到達設定的時間窗口,比如10分鐘,就會將計算后的結果存入到Cassandra中。

流式抽樣中需要解決的難點主要有兩個:數據遲到問題和時間窗口到達后對底層Cassandra的壓力沖擊。HoraeDB對這些問題的解決方案如下:

  • 數據遲到問題:為了解決數據遲到問題,HoraeDB的數據抽樣器對每個時間序列的抽樣結果暫存一個周期,等待遲到的數據到來,然后再存入到底層Cassandra;
  • 時間窗口到達,對底層尖峰流量:數據發送使用了令牌桶算法來進行數據的發送,控制數據發送頻率。

06121af71510d86434191b2f8dac1f39.png

在時序的場景下,我們經常會有一些大批量數據分析計算的需求。比如需要計算10萬個服務器30分鐘內的cpu變化趨勢。這樣的查詢會很慢,同時也會導致我們的時序存儲服務不穩定。

為了應該對這種業務場景,我們做了預聚合計算方案,預聚合計算分為流式聚合計算和批量計算。如下圖所示:

2edff6327ab490edceec59468f71d998.png
  • 流式聚合計算
    對于大規模時序數據分析場景,我們采用流式聚合計算,如上圖所示,數據上報到kafka。我們的Flink Job會根據用戶提前配置好的聚合規則,對流入的數據進行聚合計算,計算完成后,寫回到我們的存儲中,流式聚合計算有以下的特點:
    ◆ 計算性能強,可橫向擴展;
    ◆ 計算支持靈活性相對較弱;
    ◆ 需要部署單獨的計算等組件。
  • 批量聚合計算
    批量聚合計算使用的是拉模式進行數據聚合計算,核心邏輯是HoraeDB根據用戶創建的聚合規則,設置一些定時計算任務,計算任務會定時向底層存儲層發起數據拉取和計算,計算結果寫回到存儲中,批量聚合計算有以下的特點:
    ◆ 計算靈活性強;
    ◆ 無需單獨部署計算組件和消息隊列;
    ◆ 支持到5w線左右,對底層存儲開銷高。

e7f1748f0495124c6889a5a2eff2ec6f.png

444d48d071a11a01c846beb770cbd324.png

HoraeDB原有架構下,做一些大批量數據查詢和計算時存在以下問題:

  • 聚合性能低:原有引擎在執行聚合運算的時候,也和傳統數據庫所通常采用的iterative執行模式一樣,迭代執行聚合運算。問題在于每次iteration執行,返回的是一個時間點。Iterative 執行每次返回一條時間點,但對HoraeDB查詢有可能需要訪問大量時間線數據,這樣的執行方式效率上并不可取;
  • 查詢速度慢
    ◆ 從Cassandra查詢數據是一個比較耗時的過程,會耗費比較長的時間在數據準備上;
    ◆ 整個計算過程需要等Cassandra中的數據全加載到內存中,才開始計算。
  • 內存和CPU資源消耗高
    ◆ HoraeDB有可能在短時間內下發太多Cassandra讀請求,一個查詢涉及到的Cassandra讀請求同時異步提交,有可能在很短時間內向Cassandra下發大量的讀請求。這樣,一個大查詢就有可能把底層的Cassandra打爆;
    ◆ 同時拉取大量的數據點到內存中,會導致HoraeDB內存打爆。

新的查詢引擎針對老的查詢計算引擎進行了優化:

借鑒傳統數據庫執行模式,引入Pipeline的執行模式。Pipeline包含不同的執行計算算子(operator),一個查詢被物理計劃生成器解析分解成一個Query Plan, 由不同的執行算子組成,DAG上的root operator負責驅動查詢的執行,并將查詢結果返回調用者。在執行層面,采用的是top-down需求驅動的方式,從root operator驅動下面operator的執行。這樣的執行引擎架構具有如下優點:

  • 這種架構方式被很多數據庫系統采用并證明是有效的;
  • 接口定義清晰,不同的執行計算算子可以獨立優化,而不影響其他算子;
  • 易于擴展:通過增加新的計算算子,很容易實現擴展功能。比如目前查詢協議里只定義了tag上的查詢條件。如果要支持指標值上的查詢條件(cpu.usage >= 70% and cpu.usage <=90%),可以通過增加一個新的ValueFilterOp來實現。

815f671913cf7781d16891595d36f62f.png

時序數據中,一般情況下,最近三個小時的數據是被查詢比較多的熱點數據,在HoraeDB中,為了加速這部分數據的訪問,我們把最近三小時的數據放到自研的分布式緩存組件-TS-Cache中去。

TS-Cache是一個分布式的數據緩存系統,數據通過Hash算法均勻的分布在各個TS-Cache節點中。因為TS-Cache是個緩存組件,對數據的穩定性要求并沒有那么高,所以我們的時序數據在TS-Cache中保存的是單副本。

0e0ab4e5512b78c7047fdf83c44248f4.png

數據在內存中的組織如上圖所示,數據的頂層是一個SharedMap,它其實就是一個數組,目的是用來在內部對時序數據進行分片,降低gc對服務性能的影響,以及適當的減小鎖的粒度,提升服務的讀寫性能。數據中的一個項就是SeriesMap,用來保存時序數據項和它的時序數據點的值,其內部的核心數據結構是一個跳表,跳表中的每一項對應的是一個時序數據中的一個項,在這邊用SeriesData來進行表示。

SeriesData中有兩個核心的數據結構,一個是cs,一個是blocks,cs是我們的一個流式壓縮序列,這個流式壓縮需要時根據上面所述的壓縮算法來進行實現的,時序數據寫入系統后,會直接寫到這個壓縮序列cs中,每隔一定時間,會把壓縮序列中的數據導出,形成一個block數據塊,寫到blocks數組中。

為了用更少的內存來存儲更多的數據,在TS-Cache中的數據是壓縮成為block后進行存儲,放到了上圖的blocks數組中進行存儲;數據壓縮算法使用的是Gorilla這篇論文所提出的數據壓縮算法,Gorilla引入了對timestamp和value的高壓縮比算法,可大幅降低數據存儲的大小。

Timestamp根據時間關聯的條目進行差值計算、以及差值的差值計算得到占用字節數非常小的數值并進行保存。同樣Value使用XOR算法進行計算得到占用存儲更小的數值進行保存。

14138d254f6755cb5fb82f7876c66403.png
  • 時間戳壓縮:時序數據的產生大部分情況下都是有周期性的,可能是30s、1m等,所以在存儲時間戳的時候,我們只需要存儲時間戳直接的差值;
  • 值壓縮:通過對歷史數據進行分析,發現大部分相鄰時間的時序數據的值比較接近,而如果Value的值比較接近,則在浮點二進制表示的情況下,相鄰數據的Value會有很多相同的位。整數型數據的相同位會更多。相同位比較多,意味著如果進行XOR運算的話會有很多位都為0,那么我們將當前值與前序值取XOR(異或)運算,保存XOR運算結果。

f82e84a9dfe241d3a40364df77031c9a.png

d2f91e26960d1c1c569131829cb26adf.png

HoraeDB作為一個海量時序數據的存儲系統,經常會遇到一些突發性的流量高峰或者一些不合理的大查詢、慢查詢,如何保障HoraeDB的穩定性便成了一個要攻破的技術難點。

為了保障HoraeDB的穩定性,我們做了以下幾個方面的工作:

  • 服務隔離;
  • HoraeDB讀寫分離:讀寫分別部署不同實例,避免大查詢慢查詢影響數據寫入;
  • 計算處理層和存儲層分離:數據寫入和查詢處理邏輯在HoraeDB層做,底層數據存儲放到存儲層進行;
  • 機房隔離:HoraeDB部署上支持多寫,底層存儲可以配置不同機房,實現數據多寫互備,查詢支持多機房HA查詢;
  • 限流
    ◆ 在HTTP接口層支持接口調用頻率進行限流;
    ◆ 針對寫入,HoraeDB內部通過寫入隊列來感知當前寫入負載,當隊列滿,即丟棄數據,保護HoraeDB正常工作;
    ◆ 查詢上,基于查詢時間跨度、時間線條數、數據點規模等進行了限制,避免大查詢影響系統穩定性。
  • 查詢負載管理:因為在我們的時序數據查詢場景中,80%以上的情況都是查詢最近三小時內的數據,都是一些查詢和計算量比較小的查詢任務,所以在查詢上我們根據查詢請求進行計算量簡單預估,分為慢查詢和快查詢,分別放入到對應的查詢任務隊列,避免慢查詢影響快查詢;
  • 綜合全面的服務監控指標,HoraeDB的問題可以快速被發現和定位。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260874.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260874.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260874.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

飛雪迎春

轉載于:https://www.cnblogs.com/ysx4221/p/3537810.html

高可用集群技術之corosync應用詳解(一)

Corosync概述:Corosync是集群管理套件的一部分&#xff0c;它在傳遞信息的時候可以通過一個簡單的配置文件來定義信息傳遞的方式和協議等。它是一個新興的軟件&#xff0c;2008年推出&#xff0c;但其實它并不是一個真正意義上的新軟件&#xff0c;在2002年的時候有一個項目Ope…

一天總結

這幾天忙著弄畢業設計和論文&#xff0c;有好幾天都沒總結了&#xff01;學習進度也慢了下來&#xff01;接下幾天把畢業答辯弄好后&#xff01;把精力放在數據庫和編程熟練度上&#xff01;還有很多要學習的多看書多敲代碼&#xff01;最重要的是要多思考&#xff0c;要有自己…

電腦dns_win10系統dns錯誤如何解決「系統天地」

最近有位win10系統用戶在使用電腦的過程當中&#xff0c;碰到了dns錯誤的情況&#xff0c;用戶不知道如何解決&#xff0c;為此非常苦惱&#xff0c;那么win10系統dns錯誤如何解決呢?下面為大家分享win10電腦dns錯誤的解決方法。第一步&#xff1a;使用 ipconfig /flushdns 命…

第2章 Python 數字圖像處理(DIP) --數字圖像基礎5 -- 算術運算、集合、幾何變換、傅里葉變換等

目錄數字圖像處理所有的基本數字工具介紹算術運算集合運算和邏輯運算空間運算向量與矩陣運算圖像變換圖像和隨機變量數字圖像處理所有的基本數字工具介紹 算術運算 # 相加 img_ori cv2.imread("DIP_Figures/DIP3E_Original_Images_CH02/Fig0226(galaxy_pair_original).…

單例模式之文件緩存器

2012年4月18日 天氣陰 天氣灰蒙蒙的&#xff0c;對于我們這種要為畢業做準備的人來說&#xff0c;這天氣舒服&#xff0c;涼爽 中午睡了一個時后 打開電腦 突然感覺 眼睛不適應電腦屏幕的亮度&#xff0c;就是最近眼睛看電腦太久了 不工作 了 呵呵 看來該休息一下…

linux目錄詳解

轉自 http://www.cnblogs.com/Daniel-G/archive/2012/10/06/2712932.html詳解Linux目錄&#xff08;目錄樹詳細解釋&#xff09;給大家一篇關于Linux目錄 方面的詳細說明&#xff0c;好好讀一下&#xff01;Linux目錄詳解(RHEL5.4)linux有四種基本文件系統類型&#xff1a;--普…

Windows安裝cnpm報錯 The operation was rejected by your operating system.

Windows在安裝cnpm時出現如下錯誤 npm ERR! The operation was rejected by your operating system. npm ERR! Its possible that the file was already in use (by a text editor or antivirus), npm ERR! or that you lack permissions to access it. npm ERR! npm ERR! If y…

hao123電腦版主頁_hao123瀏覽器 原生網民的記憶 一代站長的傳奇

百度又有產品說再見了&#xff01;上線快8年的百度瀏覽器&#xff0c;再也不會更新了&#xff01;4月3日&#xff0c;百度瀏覽器官網發公告稱&#xff0c;“桌面百度、百度工具欄、百度地址欄、百度極速瀏覽器&#xff0c;hao123瀏覽器&#xff0c;產品將不再更新&#xff0c;基…

Client does not support authentication protocol requested by server;

今天把服務器的MYSQL從4升級到了5。用phpmyadmin連接時出現下面錯誤Client does not support authentication protocol requested by server; conside在網上發現解答&#xff1a;將mysql升級到5.x版本后&#xff0c;用客戶端登錄時出現了 Client does not support authenticati…

一些軟件設計的原則

以前本站向大家介紹過一些軟件開發的原則&#xff0c;比如優質代碼的十誡和Unix傳奇(下篇)中所以說的UNIX的設計原則。相信大家從中能夠從中學了解到一些設計原理方面的知識&#xff0c;正如我在《再談“我是怎么招聘程序”》中所說的&#xff0c;一個好的程序員通常由其操作技…

小米平板2刷remix_昆明小米售后維修點手機維修怎么收費?小米手機拆機換屏教程...

小編最近修了很多小米手機&#xff0c;大部分維修的故障基本都是手機碎屏&#xff0c;手機換電池之類的&#xff0c;小編從事小米手機維修十余年&#xff0c;小米手機整體機型性價比還是不錯的&#xff0c;所以市場上用的人還是比較多&#xff0c;尤其是在校學生&#xff0c;今…

第2章 Python 數字圖像處理(DIP) --數字圖像基礎2 - 圖像感知要素 - 圖像取樣和量化 - 空間分辨率和灰度分辨率

目錄圖像感知與獲取一個簡單的成像模型圖像取樣和量化空間分辨率和灰度分辨率圖像感知與獲取 一個簡單的成像模型 我們用形如 f(x,y)f(x,y)f(x,y) 的二維函數來表示圖像。在空間坐標 (x,y)處f(x, y)處 f(x,y)處f的值是一個標量&#xff0c;其物理意義由圖像源決定&#xff0c…

了解javascript中函數執行順序

我個人覺得一般人不會有這種寫法&#xff0c;但藝不壓身&#xff0c;呵呵。希望能幫到初學的朋友&#xff01;大家一起進步&#xff01; 首先列舉出8個例子&#xff0c;然后例子的解答會在文章末尾貼出&#xff01;測試代碼一&#xff1a; <script language"JavaScript…

外部資源獲取

處理外部資源是很繁瑣的事情&#xff0c;我們可能需要處理URL資源、File資源資源、ClassPath相關資源、服務器相關資源&#xff08;JBoss AS 5.x上的VFS資源&#xff09;等等很多資源。因此處理這些資源需要使用不同的接口&#xff0c;這就增加了我們系統的復雜性&#xff1b;而…

芯明天debug assertion failed_YJLV鋁芯電力電纜的基本介紹

原標題&#xff1a;YJLV鋁芯電力電纜的基本介紹YJLV鋁芯電力電纜&#xff0c;型號全稱&#xff1a;鋁芯交聯聚乙烯絕緣聚氯乙烯護套電力電纜。YJLV電纜的含義為&#xff1a;YJ----交聯聚乙烯絕緣;L----線芯材質為鋁材。V----聚氯乙烯護套。YJLV電纜工作溫度為導體額定工作溫度9…

1.1.1 從簡單的數據類型開始

/// <summary>/// C# 1.0 中定義的產品類型/// </summary>public class Product1{string name;public string Name { get { return name; } }decimal price;public decimal Price { get { return price; } }public Product1(string name, decimal price){this.name…

第2章 Python 數字圖像處理(DIP) --數字圖像基礎3 - 圖像內插 - 最近鄰內插 - 雙線性插值 - 雙三次內插 - 圖像放大

目錄圖像內插放大圖像圖像內插 內插通常在圖像放大、縮小、旋轉和幾何校正等任務中使用。內插并用它來調整圖像的大小&#xff08;縮小和放大&#xff09;&#xff0c;縮小和放大基本上采用圖像重取樣方法 最近鄰內插&#xff0c;這種方法將原圖像中最近鄰的灰度賦給了每個新…

然爸讀書筆記(2014-2)----影響力

第一章&#xff1a;影響力的武器 動物可能會看到某種顏色的羽毛而變得具有攻擊性&#xff0c;或者聽到某種叫聲久對自己的天敵呵護有加。動物的這種愚蠢機械反應在人類身上也有&#xff0c;在某個觸發特征出現時&#xff0c;我們會不假思索的做出相應的反應&#xff0c;之所以會…

pb 如何導出csv_Firefox火狐瀏覽器將提供導出密碼至本地的功能

6月2日&#xff0c;據外媒All About Lifehacks報道&#xff0c;Mozilla官方的bug報告頁面顯示&#xff0c;Firefox瀏覽器的導出或備份密碼請求的問題在前兩天被關閉&#xff0c;并被標記為已解決。據了解&#xff0c;該請求早在多年前就有人提出。如今被標記為已解決&#xff0…