卡桑德拉新手問題。我正在使用REST調用從社交網站收集一些數據。所以我最終以JSON格式返回數據。 JSON只是我表格中的其中一列。我試圖弄清楚存儲JSON字符串的「最佳做法」。首先,我想到了使用地圖類型,但JSON包含字符串,數字類型等的混合。似乎我不能爲map鍵/值聲明通配符類型。 JSON字符串可能很大,可能超過10KB。我可以將它作爲一個字符串存儲,但似乎效率不高。我會認爲這是一個普遍的任務,所以我確信有一些關於如何做到這一點的一般指導。我知道Cassandra對JSON有本地支持,但從我的理解來看,這主要是在整個JSON映射與數據庫模式匹配1-1時使用的。對我來說並非如此。該模式有一堆列,JSON字符串只是一種「有效載荷」。將JSON字符串存儲爲blob還是將其存儲爲「text」會更好嗎?順便說一下,Cassandra的版本是2.1.5。任何提示讚賞。提前致謝。在Cassandra列中存儲JSON字符串的有效方法?
回答
的缺點在卡桑德拉存儲引擎有真的不是一個blob和文本之間有很大的區別,因爲卡桑德拉本質上將文本存儲爲斑點。是的,您所說的「本機」JSON支持僅適用於您的數據模型與您的JSON模型匹配,並且僅在Cassandra 2.2以上。
我會將它存儲爲文本類型,並且在發送數據(或處理解壓縮)時,不應該實現任何操作來壓縮JSON數據。由於卡桑德拉的二進制協議支持transport compression。還要確保你的表格以相同的壓縮算法存儲data compressed(我建議使用LZ4,因爲它是最快的算法),以節省每個讀請求的壓縮。因此,如果你配置存儲壓縮數據並使用傳輸壓縮,你甚至不必自己實現。
您沒有說明您正在使用的是哪個客戶端驅動程序,但以下是有關如何爲Datastax Java Client Driver設置傳輸壓縮的文檔。
這取決於如何查詢您的JSON。有三種可能的策略:
- 存儲爲一個字符串
- 存儲爲壓縮BLOB
- 存儲爲一個blob
方案1有被人類可讀的優勢,當你查詢你的命令行上的數據用cqlsh或者如果你想直接調試數據直播。缺點是這個JSON列的大小(10k)
選項2的優點是保持JSON負載很小,因爲文本元素具有相當不錯的壓縮比率。缺點是:a。你需要照顧壓縮/解壓縮客戶端和b。它不是人類可讀的直接
選項3具有選項1(尺寸)和2(不是人類可讀)
您應該能夠利用表級壓縮以及二進制傳輸壓縮,因此您不必親自處理壓縮。通過這種方式,您可以將其作爲文本數據類型進行存儲,保存時將其壓縮,並通過電纜發送到應用程序時,以及易於人類閱讀(因爲您的客戶端驅動程序甚至cqlsh會在非 - 壓縮形式)。 – fromanator
是的,還有表壓縮和傳輸壓縮選項也+1 – doanduyhai
- 1. 有效的方法來爲字符串INT存儲在C
- 2. 在Android中存儲字符串的最有效方式
- 3. 最有效的方法來存儲大型base64字符串?
- 4. 只有存儲不同字符串的高效方法/結構
- 5. 在android應用程序中存儲大量字符串的有效方法
- 6. 在SQL Server中存儲大量字符串消息的最有效方法?
- 7. 查看大量字符串中存在的有效方法
- 8. 在字符串列表中搜索字符串的最有效方法?
- 9. 存儲字符串中有
- 10. 在cassandra中存儲列表
- 11. 劃分字符串的有效方法
- 12. 構建字符串的有效方法
- 13. 在字符串中存儲字符串
- 14. 在C++中將字符指針存儲到字符串中的最有效方法是什麼
- 15. 編輯JSON字符串的最有效方法
- 16. 從列表中創建字符串的有效方法
- 17. 在Lucene.NET中存儲字符串列表
- 18. 有效的方法來替換字符串中的字符(Java)?
- 19. 有效且簡單的存儲多行文本字符串的方法?
- 20. 在數據存儲中存儲元組的有效方法
- 21. 在對象中存儲一系列值的有效方法?
- 22. 如何有效地在C中存儲字符串映射?
- 23. jQuery.cookie不存儲我的JSON字符串
- 24. 將字符串流轉換爲字符串分組列表的有效方法
- 25. 在C#中存儲/檢索字典的最有效方法?
- 26. 最有效的方法來存儲存儲在STL列表中每個項目
- 27. 如何調用名稱存儲在字符串中的方法?
- 28. 在PHP字符串中存儲html的替代方法
- 29. 在C中存儲字符串的方法
- 30. 儲存在列表中的字符串的每個字符
感謝您的答覆。我正在使用Spring Data Cassandra,1.3.4.RELEASE,這迫使我繼續使用Cassandra驅動程序版本2.X.我使用2.1.9作爲驅動程序版本。 Spring提供了一個工廠bean來創建Cluster實例,看起來他們只支持不壓縮,或者Snappy。指定這個的方法只需要Enum作爲參數,而Enum只有這兩個選項。不知道爲什麼。我想我會嘗試與Snappy,因爲它支持。或者我可能會丟棄Spring Data Cassandra並手動實例化羣集。 – user2337270
我不是Cassandra的spring-data的粉絲,因爲它的API是爲關係數據庫設計的,它推動了一些糟糕的實現決策。示例包括:CassandraOperations.insert(列表
相關提示@fromanator。我最近遇到的另一個限制是Spring Data Cassandra不支持DataStax的3.X驅動程序,所以暫時我堅持使用2.X. – user2337270