JDNoSQL平臺是壹種分布式的面向列的KeyValue毫秒級存儲服務,存儲結構化數據和非結構化數據,支持隨機讀取和更新,靈活的動態列機制,在架構上支持橫向擴展,提供高並發、低延遲、高可用、強壹致性的數據庫服務,可以滿足各種業務場景。完善的平臺支持,支持業務自助建表、視圖監控、在線DDL等。
1.1 JDNoSQL的生態位
從上圖可以看出,JDNoSQL是壹個基於HDFS構建的分布式、面向列的存儲系統。需要對非常大的數據集進行實時讀寫和隨機訪問時,可以使用JDNoSQL。目前市場上的壹些關系數據庫在構建時並沒有考慮到超大規模和分布的特點。很多商家通過復制、分區等方式對數據庫進行擴展,使其突破單個節點的界限,但這些功能通常是事後添加的,安裝維護非常復雜。同時也會影響到RDBMS的具體功能,比如連接、復雜查詢、觸發器、視圖和外鍵約束,這些在大型RDBMS上代價相當大,甚至根本無法實現。JDNoSQL從另壹個角度處理可伸縮性。它通過以線性方式從下到上添加節點來擴展。JDNoSQL不是關系數據庫,它不支持SQL。目前可以通過JDPhoenix支持SQL,但是有自己的特長,RDBMS處理不了。JDNoSQL巧妙地將大型稀疏表放在商業服務器集群上。JDNoSQL具有以下特征:
大:壹個表可以有幾億行,幾百萬列。
面向列:面向列表(簇)的存儲和訪問控制,以及獨立於列(簇)的檢索。
稀疏:對於空列,它不占用存儲空間,所以表可以設計得非常稀疏。
無模式:每壹行都有壹個可排序的主鍵和任意數量的列,列可以根據需要動態增加。同壹表中的不同行可以有完全不同的列。
數據的多版本:每個單元格中的數據可以有多個版本。默認情況下,會自動分配版本號,這是插入單元格時的時間戳。
單壹數據類型:JDNoSQL中的數據都是字符串,沒有類型。
應用場景
在JD.COM使用NoSQL主要涉及以下場景:
順序服務(監控,IOT)
消息訂單(訂單/政策、聊天記錄)
多維數據集分析(實時寬表、報告、搜索建議)
監測(UMP/MDC/CAP/JDH)
Feeds流服務(評價信息、問答信息、瀑布流、朋友圈)
AI存儲(用戶特征、NLP語料庫、模型存儲)
時空數據(軌跡、氣象網絡)
金融業務(相關性分析、信用分析、風險控制/借據/支付/資產管理)
2.1基於NoSQL的廣告實時計算系統
2.1.1網絡廣告的幾個特點;
與傳統廣告相比,網絡廣告呈現出自身的壹些特點。了解這些特征是網絡廣告營銷策略本質的基礎。網絡廣告的特點如下:
傳播範圍廣:互聯網廣告傳播範圍廣,不受時間和空間的限制。它可以通過互聯網全天候向世界各地傳播廣告信息。中國的網民數量龐大,而且還在快速發展。這些網民消費能力高,是網絡廣告的受眾。他們可以在世界任何地方的互聯網上隨意瀏覽廣告,這種傳播效果是任何傳統媒體都達不到的。
非強制性傳播信息:網絡廣告是壹種點播廣告,具有報紙分類廣告的性質,但不需要受眾進行徹底瀏覽,可以根據潛在客戶的需求進行自由查詢和呈現展示,從而節省了全社會的註意力資源,提高了廣告的針對性和有效性。
受眾數據可以準確統計:傳統媒體廣告很難準確知道有多少人接觸過廣告信息。互聯網廣告可以通過權威公正的流量統計系統,準確統計每條廣告的訪問量,有利於正確評估廣告效果,進壹步優化廣告策略。
靈活的時效性:互聯網廣告可以根據需要及時更新廣告內容。
互換性和感性強:網絡廣告的載體基本都是多媒體、超文本等。,要求受眾對產品感興趣,只需要點擊就能了解到更多、更詳細、更生動的信息,甚至讓消費者親自體驗產品、服務和品牌。通過虛擬現實技術,客戶可以身臨其境。
2.1.2網絡廣告的數據類型:
網絡廣告相關的采集數據有很多種,其中最關鍵的有四種:呈現、點擊、行為、第三方數據監測。
廣告展示數據
廣告展示數據是指廣告位獲得的展示數據。壹般需要將這些數據發送到服務器進行廣告展示量(adpv)的統計分析。常規數據包含日期、用戶ID、廣告ID和IP等信息。以下是廣告展示的數據格式,其中擴展了JSON字段:
2015-01-13 19:11:55 { 00d 81D 1D-00a 291-0e 2300-87 dbce 0 da 90 } {?阿迪亞?:" 31769 "," asid": "2 "," aspid":"0 "," ptime": "14 "," ag":"4,5.20,26.1908 "," ecode": "15 "," type":"2 "," dp1": "1 "," adpid": "0 "," DSP": "0 "," source": "s"}
廣告點擊數據
Adclick數據是指每個廣告位獲得的用戶點擊數據,壹般這個數據也需要發送到服務器進行廣告點擊的統計分析。壹般來說,點擊數據包含日期、用戶ID、廣告ID和IP等信息。下面是壹個廣告點擊的數據格式,和廣告展示區別不大:
2015-01-13 00:11:06 { d 33333 C3-000 c84-2345 FB-db 768 EC 56 } { " wid ":" 13 "," aid": "103297 "," vid ":" 1446777
廣告行為數據
廣告行為數據是指廣告位獲取的用戶下載、安裝或交易的數據,壹般這些數據也需要發送到服務器,供其他用戶分析廣告行為。壹般行為數據包含日期、用戶ID、廣告ID和IP等信息。下面是壹個廣告行為的數據格式,和廣告展示數據差別不大,只是JSON擴展字段的壹些信息有所不同:
2015-01-13 09:59:39 { 00567d 26 ad-51-c 2238-f 990000 a 00 } { " ADID ":" 234555 ","。
第三方監控數據
為了讓廣告主輕松了解目標消費的網絡媒體瀏覽習慣,並將其轉化為客戶的概率,獲得公正、客觀、權威的統計信息,利用第三方廣告監測公司參與廣告的監測是非常有必要的。第三方監測也會產生監測數據,包括日期、廣告ID、用戶ID。以下是第三方監測數據的示例:
2014-12-31 108 a 451bd 3787 _ 22e 6 _ D020 _ 786 df 2695 b { 000 ad 54073-19 DDC 2-971f 26-36f 4119425 }
2.1.3.廣告數據的挑戰
數據的價值隨著時間的推移而降低,所以需要盡快處理事件。最好是壹出現就處理,壹個事件處理壹次,而不是緩存,批量處理。在數據流模型中,要處理的輸入數據(全部或部分)不是存儲在隨機存取磁盤或內存中,它們存儲在壹個或多個?持續的數據流?以…的形式到達。與傳統的存儲關系模型不同,數據具有以下特征:
流中的數據元素在線到達,需要實時處理。
系統不能控制新到達的數據元素被處理的順序,不管它們是在壹個數據流中還是跨多個數據流;也就是說,重放的數據流可能與最後壹個數據流的元素順序不壹致。
數據流的潛在大小可能是無限的。
壹旦數據流中的元素被處理,它要麽被丟棄,要麽被存檔。
2.1.4系統的主要功能
目前系統只服務於廣告行業,要求廣告展示數據和廣告點擊數據能夠實時反映到庫存系統,庫存系統可以根據現有投放量計算後續投放策略。同時可以提供部分廣告在當月的日活統計,分為省、市、用戶三個維度。在滿足上述功能的前提下,要求系統性能延遲在30秒以內,支持峰值TPS=500W的接入請求。
2.1.5.系統結構
根據前面的需求分析、設計目標和主要功能要求,整個廣告實時計算系統分為六層:日誌接收層、生產者層、消費隊列層、消費者層、業務邏輯層和存儲層。其中,消息隊列選擇了JD.COM JDQ實時數據管道,為流計算場景提供了基於Kafka的高吞吐量分布式消息隊列。業務邏輯層選擇JD.COM JRC流式計算,並為流式計算提供基於Flink的流式計算引擎。選擇高並發、低延遲、高可用的NoSQL分布式存儲作為存儲,滿足千萬級QPS的高吞吐量和隨機讀寫要求。架構圖如下:
日誌接收層
這壹層是數據的來源,通過日誌接收工具產生本地日誌文件。常用的接收工具有Scribe、Nginx、Syslog-ng和Apache Http Server。在接收到這些數據流後,它們將被存儲在本地磁盤文件中。
生產者層
這壹層是數據傳輸層,用於生成從本地到Kafka集群的日誌文件,實時監控指定的文件或目錄,提取增量數據發送到Kafka集群。
消息隊列層
這壹層是Kafka集群,負責負載均衡和輸入數據的消息緩沖,具有吞吐量高、水平擴展性好的特點。消息隊列層選擇Kafka,是因為它註重吞吐量,具有緩沖的功能。
消費者層
這壹層應用程序使用kafka隊列中的消息,並將消息的數量輸入到業務邏輯層,這是壹個承上啟下的子層。因為業務邏輯層使用Flink框架,所以所有消費層都需要連接Kafka和Flink集群。
業務邏輯層
這壹層是實現需求的重要子層。使用Flink框架,可以非常方便地部署不同規則的業務需求,實現快速計算。
存儲層
目標存儲選擇的分布式存儲NoSQL,可以滿足高吞吐量、低延遲實時更新和查找壹些特定場景的業務需求,也可以滿足橫向擴展的需求。
2.1.6.表格設計
為了滿足最終結果的實時查詢和周期性統計的要求,需要首先定義表的結構,以在NoSQL中存儲結果數據。因為數據中包含了廣告呈現和廣告點擊兩種不相關的數據,而且業務方向不同,所以需要創建兩個表來存儲這兩種數據的統計結構。
廣告的實時顯示統計
廣告實時顯示統計的結構設計如下:
其中,聯排建築的設計非常重要。該表包含三種類型的行構建,通過省名、城市名和uid進行區分,用於更高效地統計這三個維度的數據。柱族和柱的數量是1。下面是廣告實時統計表中壹行數據的例子,其中value字段用十六進制字節碼表示,是壹個長整數。
29260 _ { 2 eebee 83-eee 4-EAE 6-1F0D-a27ab 14549 fc } _ 20150117 column = PV:CNT,timestamp = 1390261754783,value = \ \ x00 \ \ x00 \ \ x00 \ \ x00 \ \ x00
廣告實時點擊統計
廣告實時點擊統計表的結構如下:
相比廣告的實時展示統計,實時點擊統計顯然更簡單,只有壹種類型的建線:adid_ plus date,這是壹種非常常規的設計方案;列族和列的數據量為1。下面是廣告實時點擊統計表中壹行數據的例子,其中值字段用十六進制字節碼表示,是壹個長整數。
36713 _ 20150117列=clk:cnt,時間戳=1390374472961,值= \ \ x00 \ \ x00 \ \ x00 \ \ x00 \ \ x00 \ \ x00 \ \ x06
2.1.7.使用NoSQL統計
根據以上對表結構設計的描述和實現,該結構支持以下實時查詢需求:
壹個省目前的廣告量。
壹個城市目前的廣告量。
用戶客戶端上廣告的當前數量
廣告的當前點擊量。
壹個廣告在壹個省的累積時間段(例如壹個月)內的歷史投放趨勢。
壹個城市中的廣告在累積時間段(例如壹個月)內的歷史投放趨勢
壹段時間內(如壹個月)廣告在用戶客戶端的歷史投放趨勢。
壹段時間(如壹個月)內廣告點擊量的趨勢
上述這些需求可以通過封裝NoSQL客戶端輕松實現,並滿足實時性要求。前端數據可視化可以借助開源的JavaScript框架快速實現,如echarts、highcharts、d3.js等。
摘要
根據Gartner的預測,2020-2022年全球非關系型數據庫(NoSQL)有望保持30%左右的高速增長,遠高於整體數據庫市場。隨著NoSQL和大數據技術的興起和發展,基於NoSQL和NoSQL生態的低成本壹站式數據處理平臺正在蓬勃發展。目前支持:NoSQLAPI、關系PhoenixSQL、時序OpenTSDB、全文搜索Solr/ES、時空幾何、graph HGraph、HBase上的analysis Spark等。隨著NoSQL的快速發展,NoSQL用戶數量越來越多,未來的NoSQL和NoSQL生態將更好地滿足各種商業場景。
NoSQL:如何使用NoSQL架構構建實時廣告系統
標簽:如何利用ptime的不同echarts描述獲得pen的高並發?