平移MySQL数据/查询集成等效卡桑德拉表示
题
考虑了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都没有。
不隶属于 StackOverflow