考虑了500万行的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(ColumnFamily中)与FOO的目的,每FOO一行,每场一列。然后创建两个指数的CF,其中一个行密钥是字符串值,而在其他的行密钥lookup_id。在索引列的列是FOO IDS。所以,你做对指数CF一个GET,然后在ID的Multiget的回来了。

请注意,如果你可以让id作为lookup_id那么你有一个保持较少指数相同。

高级别的客户喜欢Digg的lazyboy( http://github.com/digg/lazyboy )将自动维护索引的CF为您服务。卡桑德拉本身不进行自动设置(尚未)。

(2)是像(1),但复制整个FOO物体插入索引行的子列(即,索引顶层列supercolumns)。如果你没有实际foo的ID本身查询,你不需要将其存储在自己的CF都没有。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top