我想創建一個事件數據庫。同一用戶的事件將具有相同的用戶ID。然後,我可以執行查詢來檢索已完成事件A和B但不是C的用戶。NoSQL數據庫可以容納以下數據結構?
我看了一下Cassandra,但我不清楚應該如何對這些數據進行建模。
我想到的辦法是:
數據庫中的每個條目獲得一個唯一的ID(?因爲我覺得卡桑德拉需要一個唯一的主鍵),然後我有一列是我的用戶ID,非唯一。然後,我可以自由地爲每個活動提供其他欄目,具體取決於與該活動相關的內容。所以我可能會有一些條目:
1,user1,event_column=registered,fname_column=James,lname_column=Mason
2,user2,event_column=deleted
3,user1,event_column=pageview,page_column=homepage
等等。
然後我有點不清楚我將如何選擇已經完成A和B但不是C的用戶。我可以用一個查詢來做到這一點嗎?或者,我需要將所有已完成A的用戶引入到java中,然後是所有完成B併爲用戶共同篩選的用戶?
這種方法聽起來是否可行並且是使用Cassandra的好方法?
是否有其他的開源分佈式數據庫可能是合適的?
感謝您的幫助!
謝謝你(OP,不同的帳戶)。我懷疑我們可能會在交叉目的下討論。以MongoDB爲例,我不想識別事件在(..)或不在(..)中的文檔。我想確定用戶,事件A確實有一個與它們相關的文檔,並且還有另一個文檔與事件B相關聯。我不認爲in()運算符會這樣做嗎?這更像是我認爲的子選擇,但我不確定MongoDB中的等價物是什麼,或者我是否必須在應用程序中處理它 - 或者也許使用MapReduce?再次感謝您的幫助 – user384842
只是想補充一點,二手索引超過cassandra是一個非常糟糕的主意。 原因是,二級索引的元數據不在所有節點之間共享, 以及對於基於二級索引的每個查詢,每個節點都必須在其內部進行查詢。 因此,如果帶有主索引的查詢需要2個內部查詢,則使用二級索引查詢將需要查詢數量的cassandra節點。 –