Cassandra和MySql集成:如何处理UUID密钥?

时间:2015-02-19 09:42:12

标签: mysql cassandra

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

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

  1. 文本搜索文本列
  2. 按计数器列实时排序(请参阅What data structure should I use to mimic "order by counter" in Cassandra?
  3. 这两个问题都有"解决方案"但它们涉及在我的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中使用?你有另一个更好的推荐吗?反正有没有避免这次往返?

    如果问题不够明确,请告诉我,我会尽力解释。

    非常感谢,

1 个答案:

答案 0 :(得分:0)

UUID实际上是一个128位整数,您可以在MySQL中使用2个64位int来表示它。