Nosql

稀疏矩陣 - 鍵值數據庫?

  • November 1, 2015

我有一個巨大的稀疏矩陣( 10^9 行,10^6 列,密度 < 0.03% ),其中每一行至少有一個非零列,但某些列可能只包含零。單元格是十進制數字 > 0。

我正在尋找一些可以盡快檢索整行或整列的數據庫(最好是鍵值)。此外,我不需要在數據庫中進行任何分析。

我遇到過SciDB,它應該可以快速處理多維數據,但恐怕它對我的需求來說太複雜了。

此外,另一種選擇是使用 SQL db(可能是 Postgres),但這有點慢並且不能像大多數 NoSQL 那樣容易地擴展(我希望矩陣中的行快速增加)。

所以我最大的希望是一些key-value儲存,但是我不確定如何表示矩陣。

  • 使用CRS 格式- 但我不知道如何使用鍵值儲存來實現它。
  • 也許像 { key, key, value } 並且已經索引了兩個鍵,但我不確定這是否可能。- 到目前為止,我已經找到了一些關於二級索引的線索,但我無法想像它會是什麼樣子。

我有一些使用 SQL 數據庫的經驗,但幾乎沒有使用 NoSQL :(

有趣的案例…

使數據庫問題變得複雜的是您的訪問模式。看起來您想按行和按列訪問。通用數據庫通常是面向行的儲存(大部分)或面向列的儲存,這將是它們最有效的訪問模式。它們也將支持其他方式的訪問(例如,在面向行的儲存中基於列的訪問),但由於顯而易見的原因,它不是最有效的。

如果您的訪問模式(行/列)比另一個更頻繁,您可以選擇適當的數據庫。如果兩種訪問模式的可能性相同,您可以考慮以冗餘方式儲存資訊。即矩陣和它的轉置。正如您所說的矩陣密度為0.03%,成本可能不會太多。您可以在這裡撥打電話。

來到數據庫,大多數 noSQL 數據庫都提供彈性模式。即您不需要預先定義模式(列)並且列可以是可選的。出於這個原因,我認為 noSQL DB 將更適合這種稀疏矩陣案例。當您查詢該行時,您將只獲得其中包含值的列。您將獲得列名以及結果。

CRS 格式,雖然它本身對於節省空間非常有用,但它不太適合 DB 模式。您將不得不處理來自應用程序邏輯的訪問。換句話說,您不會真正使用 DB 的基於行的訪問機制。

另一種選擇是使用修改後的 CRS 格式。對於每一行,您可以將矩陣列值儲存為一系列 (column,column value) 對。您可以將其作為單個值儲存在數據庫的單個列中。這將避免數據庫的每列成本。但是,您必須進行額外的處理才能解碼應用程序中的矩陣列。

哪個數據庫?我不想取名字。我會開始一場輿論戰。請單獨進行這項研究。

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