Java 为高度非规范化的NoSQL数据库设计唯一键(主键)

Java 为高度非规范化的NoSQL数据库设计唯一键(主键),java,web-services,web-applications,nosql,Java,Web Services,Web Applications,Nosql,我正在使用Java和Cassandra数据库开发一个与论坛相关的web应用程序 我需要为存储用户详细信息的行和存储用户发布的内容的另一组行构造“键” 一个选项是获取Java语言提供的随机生成的UUID,但这些UUID的长度为16字节。由于NoSQL数据库涉及大量的非规范化,我担心如果可以以较小的大小生成密钥,是否会浪费大量的磁盘空间、RAM和其他资源 我需要生成两种类型的密钥,一种用于用户,另一种用于用户发布的内容 对于用户发布的内容,timestamp+userId是否是一个好键。其中,tim

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

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

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

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

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

如有任何建议、意见,敬请谅解

谢谢
Marcos

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

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

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

谢谢Oliver!!是的,这是一个带有分布式数据库Cassandra的分布式应用程序。由于该数据库最终是一致的,因此同步可能不会很快,这可能会导致问题,因为该id的数据可能会被覆盖。但是也可以调整Cassandra中的一致性级别,如果这导致了一个可行的解决方案,我将对此进行研究。除此之外还有其他选择吗?对于帖子的ID,我应该使用“userId”和“该用户的帖子计数”的组合来生成它们,比如这个userId:postcountofuser在您的场景中使用userId听起来是个好主意。根据您的数据表示,它还可以使您更快地搜索用户的所有帖子。(我想你可以假设一个用户只登录一次,每次只在一个会话中输入帖子)