从mysql迁移cassandra(可排序查询的设计模式)

时间:2013-09-01 16:44:23

标签: mysql cassandra database-schema cql

我有一个这样的数据库:

  • 图像
    • id(int)
    • 姓名(文字)
    • image(blob)
    • create_date(datetime)
    • 评论(文字)
    • size(int)
    • view(int)

表格图片包含带有元信息的jpg。 我有能力在MySQL中排序(通过视图,大小和create_date)

如何对Cassandra做同样的事情?


我尝试了一些设计:  - 图片     - id(文字)     - 姓名(文字)     - 图像(blob)

  • image_by_size

    • id_image(text)
    • size(int)
  • image_by_view

    • id_image(text)
    • view(int)
  • image_by_create

    • id_image(text)
    • create_date(timestamp)

但是当我不知道怎么订购而不知道“id”之前......

我看了Select 2000 most recent log entries in cassandra table using CQL (Latest version)但我不知道如何将其移植到我的用法......

1 个答案:

答案 0 :(得分:0)

一个解决方案:

  • image_by_size

CREATE TABLE image_by_size
(
   rowkey text, // arbitrary text, it can be 'IMAGE_BY_SIZE' for example
   size int,
   id_image text,
   PRIMARY KEY (rowkey,size,id_image)
);

按大小列出图片:

 SELECT id_image FROM image_by_size WHERE rowkey='IMAGE_BY_SIZE' ORDER BY size DESC;
  • image by view

   CREATE TABLE image_by_view
    (
       rowkey text, // arbitrary text, it can be 'IMAGE_BY_VIEW' for example
       view int,
       id_image text,
       PRIMARY KEY (rowkey,view,id_image)
    );

按视图列出图像:

SELECT id_image FROM image_by_view WHERE rowkey='IMAGE_BY_VIEW' ORDER BY size DESC;
  • image by create

  CREATE TABLE image_by_create
    (
       rowkey text, // arbitrary text, it can be 'IMAGE_BY_CREATE_DATE' for example
       create_date timestamp,
       id_image text,
       PRIMARY KEY (rowkey,create_date,id_image)
    );

按创建日期列出图像:

 SELECT id_image FROM image_by_create WHERE rowkey='IMAGE_BY_CREATE_DATE' ORDER BY create_date DESC;

一个表格解决方案

由于大小,视图和时间戳都是数字,因此可以只使用一个表来索引所有这些

CREATE TABLE image_index
(
   index_type text, // 'IMAGE_BY_SIZE', 'IMAGE_BY_VIEW' or 'IMAGE_BY_CREATE_DATE'
   value bigint,
   id_image text,
   PRIMARY KEY (index_type,value,id_image)
);

按大小索引图像

INSERT INTO image_index(index_type,value,id_image) VALUES('IMAGE_BY_SIZE',size_as_long,id_image);

按视图索引图像

INSERT INTO image_index(index_type,value,id_image) VALUES('IMAGE_BY_VIEW',view_as_long,id_image);

按创建日期索引图像

INSERT INTO image_index(index_type,value,id_image) VALUES('IMAGE_BY_CREATE_DATE',create_timestamp_as_long,id_image);