【发布时间】:2015-04-20 14:22:24
【问题描述】:
我正在开发一项服务,该服务大量使用 Cassandra 进行具有 60 多个列族的集群插入和查询。
到目前为止,我能够通过重新排序键或添加具有不同索引集的重复(非规范化)表来解决很多问题,以实现非常快速的插入和查询,但现在,我遇到过 Cassandra 无法开箱即用的两种情况:
- 跨文本列的文本搜索
- 按计数器列实时排序(参见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 中使用?您还有其他更好的建议吗?有没有办法避免这种往返?
如果问题不够清楚,请告诉我,我会尽力进一步解释。
非常感谢,
【问题讨论】: