Scyllab的正确ruby驱动程序

Scyllab的正确ruby驱动程序,ruby,scylla,Ruby,Scylla,我们决定在RubyonRails项目中与ScyllaDB合作,开发一些重插入组件。然而,据说处于维护模式,我们在几年前也听说过它的性能问题 我的问题是,是否有人真的在用“锡拉布”和“红宝石”进行生产?你用什么司机?它的性能如何?有什么陷阱我们应该注意吗? 顺便说一句,我知道DynamoDB交流发电机,但我们确实更喜欢使用CQL,而不是奇怪的DynamoDB json查询语法,并且需要额外的Scylla功能,如“分组依据”、多列分区键等等 谢谢 如果有人对将Ruby驱动程序与Scylla结合使用感

我们决定在RubyonRails项目中与ScyllaDB合作,开发一些重插入组件。然而,据说处于维护模式,我们在几年前也听说过它的性能问题

我的问题是,是否有人真的在用“锡拉布”和“红宝石”进行生产?你用什么司机?它的性能如何?有什么陷阱我们应该注意吗? 顺便说一句,我知道DynamoDB交流发电机,但我们确实更喜欢使用CQL,而不是奇怪的DynamoDB json查询语法,并且需要额外的Scylla功能,如“分组依据”、多列分区键等等


谢谢

如果有人对将Ruby驱动程序与Scylla结合使用感兴趣,可以考虑一下如何继续

  • 让它碎片意识到。我们已经看到了最近为支持碎片的Python驱动程序所做的其他努力(操作指南可以在以下文章中找到:和)。例如,我们已经有了shard aware和驱动程序(我现在正在为C/C++编辑博客)。因此,这条路走得很好
  • 使碎片感知驱动程序支持CDC流(请参阅)。这是一项新功能,您可以从帖子中看到,我们正在将此功能添加到当前驱动程序中。但是如果你要做Ruby,你应该从这个开始

  • 如果您在这里没有得到关于用户体验的更多答案,请同时询问Scyllab或。

    我们目前使用的是Cequel和您链接的Ruby驱动程序的组合(Cequel在引擎盖下使用)。在我们的第一个Scyllab/Cassandra项目中,我们假设灵活的模式比实际更灵活(例如,您不能在没有考虑的情况下更改键),因此Cequel听起来很适合。在我们的第二个项目中,我们非常谨慎地选择了键等,我们只是半直接地使用底层驱动程序(我们使用
    Cequel::Metal
    )。我们使用Rake任务来处理迁移,因为迁移的工作方式与PostgreSQL不同(传统意义上的向上/向下没有意义-向下迁移不会丢失新列,只会从新记录中丢失它们)

    Cassandra社区的默认答案似乎是“运行JRuby,使用JDBC驱动程序”。不要那样做。对于合适的人来说,JRuby可能很棒,但它并不完全兼容MRI,而且它的性能也不一样。他们下一步会建议ODBC
    ruby odbc
    应被视为最后的兼容性库。它有许多未实现的ODBC特性。它可能会泄漏ODBC状态并锁定该线程,或者如果驱动程序没有防止线程安全性差,则会导致进程崩溃(!)。它在Rails中的性能会非常差。也不要走那条路

    这两条建议是你所能得到的,至少当我环顾四周时。在Cassandra社区中,似乎有很多人仍在将10年前的Ruby印象应用于现代Ruby。我的意思是,他们认为由于JVM,JRuby比MRI更快,因为Twitter放弃了Rails,转而使用JVM。现在已经不是这样了(而且已经有一段时间没有了)。JRuby在某些情况下表现出色,但在很多情况下,核磁共振成像(MRI)可以击败它。推荐JDBC的人可能是出于好意,但感觉很像“你的语言糟透了,用我们的”。这种态度似乎导致他们花时间做Python或Go驱动程序,而不是Ruby驱动程序


    如果ScyllaDB付钱给我开发一个驱动程序,我会使用FFI来包装它并公开一个像样的API。我可能不会编写ActiveRecord驱动程序,因为我不会将Scyllab/Cassandra用于我们的主要数据对象,并且如果没有带过滤功能的
    ,非基于键的查询(使用ActiveRecord的主要原因)是不可能的,而您可能不想让HTTP客户端使用这些功能。您可以使用物化视图等,但查询略有不同。在此之上的库可以将这些概念映射到ActiveRecord。使用FFI包装器的困难部分将是深思熟虑地设计一个惯用的界面;谢天谢地,由于FFI项目的努力,剩下的工作相当简单。

    另一个选择是使用(与DynamoDB兼容的API),在这种情况下,您可以使用AWS DynamoDB驱动程序。性能不会像CQL那么好,但它仍然会非常快,并且您可以像这样使用库