【问题标题】:Cassandra and MySql integration: How to deal with UUID keys?Cassandra 和 MySql 集成:如何处理 UUID 键?
【发布时间】:2015-04-20 14:22:24
【问题描述】:

我正在开发一项服务,该服务大量使用 Cassandra 进行具有 60 多个列族的集群插入和查询。

到目前为止,我能够通过重新排序键或添加具有不同索引集的重复(非规范化)表来解决很多问题,以实现非常快速的插入和查询,但现在,我遇到过 Cassandra 无法开箱即用的两种情况:

  1. 跨文本列的文本搜索
  2. 按计数器列实时排序(参见What data structure should I use to mimic "order by counter" in Cassandra?

这两个问题都有“解决方案”,但它们涉及在我的 Cassandra 集群上使用不同的引擎,这些引擎不容易设置,而且我没有使用它们的专业知识。此外,对于我的用例,它们看起来有点过头了。

出于这个原因,我决定对于需要文本搜索或某些排序和分页的少数场景,我会使用 MySQL,这意味着我会将数据同时插入到 MySQL 和 Cassandra 中以用于几个表。对于不需要搜索或专门分页的普通查询,我会使用 Cassandra,但当我需要这样做时,我会参考 MySQL。

原则上这样做很容易,但问题是,我在 Cassandra 中的复合键都是 UUID 格式(无论是生成的 UUID 还是时间 UUID)。然而,从我读过的内容来看,MySQL 将 UUID 作为主 OR 索引键并不好。 (例如,请参阅http://kccoder.com/mysql/uuid-vs-int-insert-performance/)。

我的问题是,您建议如何处理这个问题?如何让 Cassandra 和 MySQL “共享”密钥,同时保持足够好的性能?

我是否应该在 MySQL 上使用自动增量索引,然后将该键存储回 Cassandra,以便下次我需要从 MySQL 获取行时,我首先在 Cassandra 中查询该 UUID,然后获取自动增量键在 MySQL 中使用?您还有其他更好的建议吗?有没有办法避免这种往返?

如果问题不够清楚,请告诉我,我会尽力进一步解释。

非常感谢,

【问题讨论】:

    标签: mysql cassandra


    【解决方案1】:

    UUID其实是一个128位的整数,在MySQL中可以用2个64位的int来表示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-27
      • 2012-03-11
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 2019-06-02
      • 2018-10-29
      • 1970-01-01
      相关资源
      最近更新 更多