2011-09-22 64 views
0

我有一個應用程序,用戶可以在其中定義自己的數據集(字段,字段類型等),然後存儲他們的數據...非常類似於他們創建和管理自己的數據表。尋找數據存儲...哪選擇

這樣做似乎會出現問題,當試圖從類似MySQL的設置...從自定義查詢角度和從存儲角度來看。我不想結束數以千計的表格甚至管理如此多的不同數據庫。

有人告訴我,NoSQL是基於遠離瘋狂的複雜查詢的靈活性而研究的。

最終結果是用戶將能夠查詢這些數據集來構建圖表。會像http://redis.io這樣的事情爲我完成這個任務嗎?

如果沒有,有沒有人有最好的選擇來支持這項任務的建議?

謝謝!

回答

0

您需要仔細考慮您的數據模型和您所需的查詢以作出此決定 - 各種NoSQL技術中的每一種技術都有略微不同的數據模型和功能集。

像Cassandra這樣的鍵值數據庫可能支持動態字段定義,但不會支持字段輸入。您可以存儲原始字節值並覆蓋您自己的類型系統,但您不會從數據庫獲得支持來強制執行類型。

NoSQL數據庫通常不支持複雜的查詢(無連接等),因此您必須使用簡單查詢(密鑰查找)或denormalise來管理以支持特定查詢。

如果你正在使用圖表,你有沒有考慮過一個RDF數據庫(三重存儲)?這些也允許很大的靈活性,但不是基於表(關係)。他們通常支持SPARQL查詢語言。請參閱http://answers.semanticweb.com/網站。

0

根據您的描述,您需要一個面向文檔的數據庫或一個能夠知道(甚至可能是索引)值的鍵/值存儲區。

Riak會適合該模型,因爲它是一個鍵/值存儲區,您不必爲這些值預定義結構+它具有次級標記,其中每個{鍵,值}對持續存在,您可以添加一個自定義索引。在Riak的話你有能力:tag a Riak object with some index metadata, and later retrieve the object by querying the index, rather than the object's primary key

它適合你正在尋找解決很好的描述。

下面是芭蕉的博客(簡單的捲曲的HTTP請求)的例子:

curl -X POST \ 
-H 'x-riak-index-twitter_bin: rustyio' \ 
-H 'x-riak-index-email_bin: [email protected]' \ 
-d '...user data...' \ 
http://localhost:8098/buckets/users/keys/rustyk 

它說,插入...user data...下一個關鍵rustyk,或順便說一句,標籤(index)它twitter「rustyio」和email「rusty @ basho。COM」(_bin,只是意味着這些指數是二進制)

我們讀取剛創建鍵 「指數」,你可以簡單地說:

curl localhost:8098/buckets/users/index/twitter_bin/rustyio 

返回:

{"keys":["rustyk"]} 

關鍵你可以用來檢索該

+0

該Basho的博客:[二級索引在Riak](http://blog.basho.com/2011/09/14/Secondary-Indexes-in-Riak/) – tolitius