mysql - 将 MySQL 数据/查询集转换为等效的 Cassandra 表示

标签 mysql nosql cassandra

考虑具有以下表结构的 5 亿行 MySQL 表 ...

CREATE TABLE foo_objects (
  id int NOT NULL AUTO_INCREMENT,
  foo_string varchar(32),
  metadata_string varchar(128),
  lookup_id int,
  PRIMARY KEY (id),
  UNIQUE KEY (foo_string),
  KEY (lookup_id),
);

...仅使用以下两个查询来查询...

# lookup by unique string key, maximum of one row returned
SELECT * FROM foo_objects WHERE foo_string = ?;
# lookup by numeric lookup key, may return multiple rows
SELECT * FROM foo_objects WHERE lookup_id = ?;

鉴于这些查询,您将如何使用 Cassandra 表示给定的数据集?

最佳答案

你有两个选择:

(1) 有点传统:有一个 CF(列族)和您的 foo 对象,每个 foo 一行,每个字段一列。然后创建两个索引 CF,其中一个中的行键是字符串值,另一个中的行键是 lookup_id。索引行中的列是 foo id。因此,您对索引 CF 执行 GET,然后对返回的 ID 执行 MULTIGET。

请注意,如果您可以使 id 与 lookup_id 相同,那么您需要维护的索引就少了一个。

Digg 的 lazyboy (http://github.com/digg/lazyboy) 等高级客户端将自动为您维护索引 CF。 Cassandra 本身不会自动执行此操作(目前)。

(2) 与 (1) 类似,但您将整个 foo 对象复制到索引行的子列中(即,索引顶级列是超列)。如果您实际上不是通过 foo id 本身进行查询,则根本不需要将其存储在自己的 CF 中。

关于mysql - 将 MySQL 数据/查询集转换为等效的 Cassandra 表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2413466/

相关文章:

node.js - 为广告/分析服务选择数据库

php - 无法使用 php webservice 连接 unity 和 mysql

node.js - "Traditional"RavenDB一对多查询

php - 创建 mysql 查询的正确方法

mongodb - 如何在 MongoDB 中查询字典数组?

cassandra - Apache Cassandra 中的复合索引

cassandra - 主从与对等分布式计算

cassandra - DevCenter 报告语法错误,但在 cqlsh 上运行相同的 CQL

php - MYSQL 连接两个表,并使用第二个表中的匹配值

php - 从sql中选择前50条记录