Database design 什么';设计卡桑德拉数据模型的最佳实践是什么?
要避免的陷阱是什么?你有什么交易中断吗?例如,我听说导出/导入Cassandra数据非常困难,这让我怀疑这是否会妨碍将生产数据同步到开发环境 顺便说一句,很难找到关于卡桑德拉的好教程,我仅有的一本还是很基础的Database design 什么';设计卡桑德拉数据模型的最佳实践是什么?,database-design,nosql,cassandra,Database Design,Nosql,Cassandra,要避免的陷阱是什么?你有什么交易中断吗?例如,我听说导出/导入Cassandra数据非常困难,这让我怀疑这是否会妨碍将生产数据同步到开发环境 顺便说一句,很难找到关于卡桑德拉的好教程,我仅有的一本还是很基础的 谢谢。对我来说,最重要的是决定是使用OrderedPartitioner还是RandomPartitioner 如果使用RandomPartitioner,则无法进行范围扫描。这意味着您必须知道任何活动(包括清理旧数据)的确切密钥 因此,如果你有大量的搅动,除非你有某种神奇的方法知道你为哪
谢谢。对我来说,最重要的是决定是使用OrderedPartitioner还是RandomPartitioner 如果使用RandomPartitioner,则无法进行范围扫描。这意味着您必须知道任何活动(包括清理旧数据)的确切密钥
因此,如果你有大量的搅动,除非你有某种神奇的方法知道你为哪些键插入了东西,否则使用随机分区器你很容易“丢失”东西,这会导致磁盘空间泄漏,最终会消耗所有的存储空间 另一方面,您可以询问有序分区器“在A和B之间的列族X中我有哪些键”?-它会告诉你的。然后你可以把它们清理干净 然而,也有不利的一面。由于Cassandra不进行自动负载平衡,如果您使用有序分区器,很可能所有数据都将只在一个或两个节点中结束,而在其他节点中没有,这意味着您将浪费资源 对此,我没有任何简单的答案,除非在某些情况下,您可以通过在密钥开头添加一个简短的散列值(您可以从其他数据源轻松枚举的内容)来获得“两全其美”,例如用户ID的16位十六进制散列,它将为您提供4个十六进制数字,然后是你真正想用的钥匙 然后,如果你有一个最近被删除的用户列表,你只需要散列他们的ID和范围扫描来清除任何与他们相关的内容 下一个棘手的问题是二级索引-Cassandra没有任何索引-因此,如果需要按Y查找X,则需要在两个键下插入数据,或者使用指针。类似地,当这些指针指向的东西不存在时,可能需要清理这些指针,但在此基础上没有简单的查询方法,所以你的应用程序需要记住 应用程序错误可能会留下您已经忘记的孤立密钥,并且您将无法轻松检测它们,除非您编写一些垃圾收集器,定期扫描数据库中的每个密钥(这将需要一段时间,但您可以分块执行),以检查不再需要的密钥 这些都不是基于实际使用情况,只是我在研究中发现的。我们在生产中不使用卡桑德拉 编辑:Cassandra现在在主干中有二级索引。另一个教程在这里: 你有什么交易中断吗? 不一定是交易破坏者,但要注意一些事情
这太长了,无法作为评论添加,因此为了澄清问题列表中的一些误解,请回复:
我认为这值得更新,因为卡桑德拉1.2最近发布了 在过去的18个月里,我一直在使用卡桑德拉制作社交游戏 我的想法是,你必须利用卡桑德拉的优势。因此,很好地理解它的作用和方式,有必要查看要使用的数据模型,甚至确定另一个DB解决方案是否对您更有用 OrderedPartitioner非常有用