【问题标题】:Designing Unique Keys(Primary Keys) for a heavily denormalized NoSQL database为高度非规范化的 NoSQL 数据库设计唯一键(主键)
【发布时间】:2011-06-19 21:44:09
【问题描述】:

我正在使用 Java 和 Cassandra 数据库开发与论坛相关的 Web 应用程序。

我需要为存储用户详细信息的行和另一组存储用户发布的内容的行构造“键”。

一种选择是获取 Java 语言提供的随机生成的 UUID,但这些是 16 字节长。由于 NoSQL 数据库涉及大量的非规范化,我担心如果可以生成更小的密钥,是否会浪费大量磁盘空间、RAM 和其他资源。

我需要生成两种类型的密钥,一种用于用户,另一种用于用户发布的内容。

对于用户发布的内容,timestamp+userId 是否是一个好键。其中timestamp 是发布内容的服务器时间,userId 是指用户行的键。

任何建议,感谢 cmets ..

谢谢 马科斯

【问题讨论】:

    标签: java web-services web-applications nosql


    【解决方案1】:

    这是一个分布式应用程序吗?

    然后您可以使用一个简单的同步计数器,并在启动时使用下一个可用 id 对其进行初始化。

    另一方面,数据库应该能够处理由 java 创建的 UUID 哈希。 这是创建诸如 sessionIds 之类的东西的标准,它需要是唯一的。 您的问题有些相似,因为您上下文中的会话将代表一组用户输入。

    【讨论】:

    • 谢谢奥利弗!!是的,这是一个带有分布式数据库 Cassandra 的分布式应用程序。由于该数据库最终是一致的,因此同步可能不是很快,这可能会导致问题,因为该 id 的数据可能会被覆盖。但是也可以在 Cassandra 中调整一致性级别,如果这会导致可行的解决方案,我会进行研究。除了这个还有其他选择吗?
    • 对于帖子的 ID,我应该使用“userId”和“该用户的帖子数”的组合来生成它们,例如 userId:PostCountOfUser
    • 在您的场景中使用 userId 作为您的一部分听起来是个好主意。根据您的数据表示,它还可以让您更快地搜索用户的所有帖子。 (我猜你可以假设一个用户只登录一次,并且一次在一个会话中输入帖子)
    猜你喜欢
    • 2012-08-10
    • 2011-10-10
    • 2013-01-18
    • 1970-01-01
    • 2015-01-28
    • 2015-09-09
    • 1970-01-01
    • 2012-04-01
    • 2011-05-29
    相关资源
    最近更新 更多