我是cassandra的新手,而我的cassandra提供了大量的读取超时错误。但是仍有问题可能是设计问题(对于我的应用cassandra预计存储数万亿的数据):
问题1:在我所有的cassandra表中,我使用UUID作为rowkey ...但是对于几个表只是为了维护我打破了规则,如在用户表中我将电子邮件ID作为rowkey ....以便查看表我可以理解存储的数据...使用UUID正确的方法用于大型案例和第二种用户表的方法是对的???????????????
问题2:我有一个关系表,其中包含startNodeId,relationTypeId,endNodeId ... rowkey,因为它是UUID,它是relationId .....我在startNode,relationType,endNode上定义二级索引,因为我可以通过任何方式查找他们的商业案例.........因为我必须做的每一个新行都要检查ALREADY现有关系与否......避免现有检查的一种方法是:我采取startNodeId,relationTypeId ,endNodeId排序它们并创建HASH CODE并将其用作ROWKEY ...所以我已经明确地检查了这里..........这是正确的方法???????
请指导我,我坚持这些想法......任何指导都会对我有所帮助
答案 0 :(得分:0)
回答你的第一个问题,除非你在处理非uuid值的rowkey时感觉很舒服,否则更容易跟踪UUID。
关于你的第二个问题,你为什么不试试compound key。你不需要维护像hashs这样的hashcode,把它留在Cassandra上。
答案 1 :(得分:-1)
1)更好地使用自然键而不是UUID。电子邮件,时间戳,复合主键等。使用UUID是RDBMS世界的一种方法,你应该在Cassandra中避免使用它
2)读取 - 修改 - 更新是Cassandra的错误模式。如果您的业务案例允许,请尝试重写数据。或者只是使用时间戳并获取具有最新时间戳的行(不要忘记TTL)。