我將數據存儲在一個Cassandra 2.0.10表中。有一列(名爲score
),整數類型,可以採取任何值。我需要編寫一個後臺作業,將值分配給另一列rank
,給出值爲1的分數字段中值最高的行,值爲2的分數字段,等等。具有最小值score
的行必須獲得分配給rank
的總行數。這是目前在定製列表定義爲如何從卡桑德拉表建立排序列表?
CREATE TABLE players
(user int, rank int, score int, details blob, PRIMARY KEY(user))
賭注它像PostgreSQL的,我會做一些喜歡使用增加了一個值
select id, rank from players order by score desc offset A limit 100;
和這樣迭代數據庫的大小100.頁在一次查詢中會給我排名前100的玩家,第二次排名前100到200等等。然後我可以通過ID,逐個或批量發佈更新聲明。
當我嘗試在Cassandra CQL中做同樣的事情時,發現許多所需功能不受支持(沒有順序,沒有偏移,沒有明確的方式來訪問所有行)。我試圖建立分數列的索引,但這沒有幫助。
這個等級分配是一個幫手工作。迭代需要幾天甚至幾周是沒有問題的。可以稍微不一致,因爲在作業運行時分數可能會發生變化。這不是應用程序的主要功能。主要功能不使用範圍查詢,Cassandra可以在那裏很好地工作。
是否有可能以某種方式將Java和CQL結合起來使用,或者限制足夠嚴重我需要使用不同的數據庫引擎?
請編輯您的帖子,添加表格說明。 – 2014-09-01 07:07:58
在CQL中添加了表格聲明。 – h22 2014-09-01 17:55:03