2012-03-04 69 views
0

讓我們假設用戶擁有博客帖子的數據模型。每篇文章都有一個獨特的標題和許多屬性。Cassandra中的二級索引將導致兩個DB讀取

我有一個柱族「帖子」,其中每行是這樣的:

posts = { 
    "yersterday" : { 
        date : 03-04-2012 
        userID : abfe222234 
        tags : "beatles,paul" 
        } 
     } 

我要編制索引的帖子用戶,所以我有另一個專欄家庭

user_posts = { 
     abfe222234 : { 
        yesterday : null 
        .... 
        } 
      } 

這個模型經過了大量有關Cassandra二次索引的研究,其中我來到這些幻燈片:http://www.slideshare.net/edanuff/indexing-in-cassandra,並且瞭解到超級列族越來越少使用。

我的問題:

如果希望所有有關用戶帖子的細節,這意味着我要讀的DB兩次:一次獲得所有帖子的ID,並一次獲取所有文章的這些ID的詳細信息。

我錯過了什麼?

謝謝, Issahar。

編輯:

另一種選擇,就是讓「user_posts」是一個超級CF,並使其包含所有在裏面「上崗」的數據。

優點:您必須只提取一次所有數據。

缺點:1.您將複製所有數據。 2.您不能搜索一次帖子的屬性。

你說什麼?

回答

1

對我來說看起來非常簡單 - 在這種情況下,確實需要執行兩次數據庫讀取才能獲取數據。對於它的價值,大多數關係數據庫還需要執行兩個邏輯讀取,除非用戶感興趣的數據完全包含在索引中。唯一的區別是在關係數據庫中只有一次網絡往返。

+0

而如果有數百個帖子呢?你如何獲取它?用'KEY'('a','b',...)「構建一個非常非常長的CQL?它似乎並不正確! – 2012-03-04 16:23:48

+0

慢慢地,我想象。嚴重的是,使用謂詞似乎是合乎邏輯的方法。例如,請參見http://prettyprint.me/2010/01/20/introduction-to-nosql-and-cassandra-part-2/,具體來說「讀取或寫入數據時,可以讀取/寫入一組列一個特定的鍵(行),這組列可以是列表列名稱指定的,也可以是切片謂詞,假設列以某種方式排序(這是一個配置參數)「 – 2012-03-04 16:27:35

+0

但它們不是完全排序。你有用戶A的帖子,然後是用戶B的帖子,然後是用戶A的帖子。BTW,我說希伯來語,所以謝謝你的指針...... :) – 2012-03-04 16:30:57

相關問題