NoSQL数据库可以容纳以下数据结构?

时间:2015-08-14 21:35:52

标签: cassandra nosql

我想创建一个事件数据库。同一用户的事件将具有相同的用户ID。然后,我可以执行查询以检索已完成事件A和B但不是C的用户。

我看过Cassandra,但我不清楚我应该如何建模这些数据。

我想到的方法是:

数据库中的每个条目都获得一个唯一的ID(因为我认为Cassandra需要一个唯一的主键?),然后我有一列是我的用户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的所有用户,以及所有已完成B并为共同用户过滤的用户带入java?

这种方法听起来有可能并且是使用Cassandra的好方法吗?

是否有其他可能合适的开源分布式数据库?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

在" event_column"上使用二级索引您可以询问...WHERE event_column IN ('A', 'B'),但不能像常规SQL那样执行NOT IN子句。 (另见this answer)。

支持您的查询的数据库示例为MongoDB,其中$nin$in分别与NOT IN (...)IN (...)相似。 (MongoDB是一个文档数据库,其中Cassandra是一个列数据库。) 为了防止对所有文档进行完整扫描,如果只有少数文档包含您搜索的事件,请记住在events属性上放置二级索引。