2012-11-20 160 views
2

我試圖找到一個數據庫來作爲一個Python集。這是因爲我的數據太大而無法存儲在內存中。集合的NOSQL數據庫(與字典/鍵值存儲相對)?

我使用SQLite試過,但聽說它可能有性能問題>數據中10 GB,所以我期待在試圖CouchDB

問題是,它似乎是一個字典的工作,不喜歡組?

是否有一個數據庫工具作爲Python集?也就是說,它只是存儲值而不是鍵值對呢?

(我要的代碼在Python所以我感興趣的東西,很容易與Python的使用)

編輯:

我將它存儲爲一個巨大的集合,而不是幾個小。

+0

如果您的目標是存儲超過10GB的單套,那麼您可能不應該使用python。另外,如果你有多個集合,每個集合都比較小,你是否考慮過一個平面文件數據庫? – goncalopp

+0

我會把它作爲一個偉大的集合存儲。同樣希望有快速的事情,因爲這會對性能至關重要。 –

+0

這使事情變得複雜。你期待什麼樣的訪問模式? – goncalopp

回答

1

根據How is set() implemented?的主要答案,密鑰/值存儲的行爲類似於dict,但無論如何,set的實現方式基本如此。爲什麼不只是使用一個小的虛擬值,並對鍵進行設置操作?

+0

直截了當的解決方案。但NoSQL dbs是否也會以相同的方式實現集合和字典? –

+1

不一定,我會說,但通常兩個數據結構都將使用散列表。但是,一個鍵/值存儲可能沒有爲這麼多的鍵準備好。大多數(所有?)類型的散列表在性能嚴重下降時,一旦超過其最佳容量 – goncalopp

+0

這種缺點也可能適用於這些系統中的套件。我無法真正想到數據庫會爲集合選擇更優化/可擴展設計的原因,但不能爲地圖選擇。但是,當然你是對的,無論OP採用什麼解決方案,他們都需要確保它的設計能夠縮放到他們想要的設置大小,並且使用地圖來實現一組留給優化的餘地。 – acjay

1

Redis的可存儲的數據類型:
http://redis.io/topics/data-types

它有一個Python客戶端。

+0

http://redis.io/topics/faq:「我喜歡Redis的高級操作和功能,但我不喜歡它將內存中的所有內容都存儲在內存中,並且我無法使數據集擴大內存。這個?」 –

+0

保持upvote,因爲你在我的標題中回答了q。 –

0

爲什麼不使用設置值作爲唯一鍵的集合?

UPD: 例如,你有文件是這樣的:

{ 
    _id: "someid", 
    youset: {val1, val2, val3}, 
} 

您可以創建一個新的集合,如:

{ 
    _id: val1, 
    owner: "someid" 
} 
{ 
    _id: val2, 
    owner: "someid" 
} 
{ 
    _id: val3, 
    owner: "someid" 
} 
... 

既然你不同時需要整個數據,不需要將其嵌入到主文檔中。

+0

請解釋。 –