在决定自己产品的技术堆栈时,由于其出色的性能,我决定将scyllaDB用于数据库。
对于本地开发,我在Macbook上设置了Cassandra。 考虑到ScyllaDB现在支持(实验)MV(材料化视图),因此使开发变得容易。对于开发服务器,我正在Linod上托管的Ubuntu 16.04上运行ScyllaDB。
我面临以下问题:
几周后的一天,有一天,当我使用分区键从基本表(从在Ubuntu上运行的ScyllaDB中)删除条目时,相应的MV仍显示了已删除记录的相应条目。 在删除整个键空间并重新创建它后,此问题已修复,但是我无法查明是什么原因导致了这种不一致。
当我删除MV并重新创建它时,它没有复制旧数据。 我尝试搜索,但是找不到强迫MV从基表读取并填充自身的方法。
对于第一个问题,我想知道是否有人遇到过类似情况。另外,如果我有什么办法可以防止这种情况的发生或无法避免,那就是“实验性”的意思。
感谢您的帮助或参考。
答案 0 :(得分:3)
在2.1版中,Sylla缺乏视图构建功能(即使用现有数据填充创建时的视图),但是在2.2版中已解决。
答案 1 :(得分:2)
实际上,2.1的MV状态不完整。它在本周将发布的2.2中变得更好。它仍然不是GA,但我们在2.2之上有一个分支,它合并了master的较新更改,该更改几乎就在那里。它应在2个月内达到GA质量。
请注意,Cassandra MV的状态是实验性的,我们在发现C *的MV中存在设计缺陷的任何地方都在打开JIRA票证。
答案 2 :(得分:1)
tldr; 我建议您在需要MV时坚持使用cassandra,或在scylla中手动进行MV。
材料化视图是超级实验性的。我将它们在生产中运行了大约6个月,以手动替换其功能。这样做是为了提高性能。因此,如果您的目标是性能,我建议您避免使用它们。
我可以证明,如果在已填充的表上创建的物化视图实际上会自行填充物化视图,因此这似乎是一个scylladb问题。 Cassandra有一个不同的问题,如果您在大型生产表上执行此操作,写操作将使DB陷坑。
我也没有截断主表并在cassandra中看到反射的问题。
此外,出于性能原因,我尝试了scylladb来突飞猛进。我发现使用它非常困难,在花了一个星期的时间试图使其执行我所知道的卡桑德拉会做的事情后,就放弃了。
答案 3 :(得分:0)
如果基础表在创建MV时有条目,则@Highstead确认自动填充MV。
对于表和MV中不一致的主要查询,我发现这是由于对基表的截断查询所致。
也为此找到了一个问题https://github.com/scylladb/scylla/issues/3188
它指出,当前,将基表截断不会清除从该表创建的MV。
反之亦然,您可以在MV上运行截断查询,并且不会引发异常(应该在该位置出现异常),并且即使基表包含条目,MV也将被清除。
因此,目前的解决方案是截断每个MV和表格。