Architecture

高並發儲存系統

  • February 10, 2012

想像一下,您的要求是您有 3 個巨大的表(結構化數據),每個表有 300 億行(總大小為 4TB),並且您的許多並髮使用者(它們是遠端 LAN 機器上的並行作業系統執行緒)需要讀取一部分通過他們的 SELELCT WHERE GROUPBY 查詢和高度並發的數據,例如同時進行 10,000 次並發讀取,並且使用者還需要將數據插入(無更新)高度並發的這些表中,例如 2000 名並發寫入者(遍布數據中心 LAN 網路) . 使用者希望盡可能快地從這個儲存中讀取和插入,其中每次讀取和寫入將發生在毫秒到 1 秒的範圍內。

您推薦哪些技術來滿足這種要求?是否有任何數據儲存或鍵值儲存可以做到這一點?云不是一種選擇。

一些說明:

使用者不必立即查看數據,最終的一致性是可以接受的。數據是通過儲存可以提供的任何驅動程序訪問的,使用者再次只是在數據中心的遠端機器上執行的執行緒。查詢大多類似於 SELECT WHERE GROUPBY。

數據採用表格格式,每行大約 60 個字節。

沒有云選項,我不能使用 DynamoDB 或類似的解決方案。我必須能夠在數據中心內部託管它。

表的所​​有數據都可以隨時讀取,使用模式是不可預測的。沒有連接或超長查詢。不需要 DR,但需要合理的 HA,但不一定要花哨。每個讀者都會根據其 where 子句獲得一批行,而行並不真正相關。我們可能可以為每一行設置固定長度,但我希望儲存層會擔心它。

此外,我最關心的是並發讀取時發生的所有並發寫入。

非常感謝您對此的見解。

更重要的是,我有其中三個表,每 300 億行包含不同的對像類型

如果最終一致性是可以接受的並且您的所有查詢都是聚合的,那麼也許低延遲的 OLAP 系統可能適合您。您的要求聽起來有點像算法交易平台。這種類型的架構通常用於需要對最新數據執行聚合統計分析計算的交易大廳系統。

如果您可以按日期對數據進行分區並且舊行不會更新,那麼您可以使用傳統的 OLAP 伺服器(例如由普通 RDBMS 平台支持的 Microsoft 分析服務)建構混合 OLAP 系統。應該可以處理約 4TB 的數據,並且 SQL Server 和 SSAS 都將執行共享磁碟集群。其他供應商也提供類似的 OLAP 系統(例如 Oracle/Hyperion Essbase)。

OLAP 伺服器通過將數據與聚合一起保存在本機儲存中來工作。大多數將支持分區數據。此外,大多數還可以在 ROLAP 模式下工作,在這種模式下,它們會針對底層數據庫發出查詢。需要注意的重要一點是,儲存策略可以基於每個分區進行管理,您可以通過程式方式將分區從一個分區切換到另一個分區,

在此模型中,歷史數據儲存在 MOLAP 分區中,同時還保留了數據的聚合。如果可以從聚合中滿足查詢,則伺服器將使用它們。可以調整聚合以適應查詢,正確的聚合將大大減少解析查詢所需的計算量。使用這種類型的系統可以實現非常靈敏的聚合查詢。

實時數據可以通過維護一個小的前導分區來實現——如果需要的話,可以保存目前月份、當天甚至小時。OLAP 伺服器將對數據庫發出查詢;如果這個分區足夠小,DBMS 將能夠快速響應。正常流程會創建新的前導分區並將關閉的歷史期間轉換為 MOLAP。可以合併較舊的分區,允許以任何所需的粒度管理歷史數據。

寫入數據庫的客戶端只是直接寫出底層的 RDBMS。如果歷史數據保持靜態,它們只會寫入前導分區。如果您需要額外的 DBMS 性能,4TB 是使用 SSD 的實用卷。甚至主流供應商也提供基於 SSD 的產品,並提供更快的 SLC 單元作為選項。

引用自:https://dba.stackexchange.com/questions/12519