cassandra适合分析存储吗?

时间:2015-07-09 18:11:09

标签: cassandra

我愿意开发一个开源分析项目,该项目将存储访问量,参考者,设备(按礼物,家庭等)。

我对卡桑德拉世界相当陌生,所以我提出了许多关于使用它进行建模的问题。

我已阅读lot documentation关于它,这是我的数据模型的一部分:

create table visits(
    id                      UUID,
    remote_addr             VARCHAR,
    method                  VARCHAR,
    user_agent              VARCHAR,
    status_code             INT,
    host                    VARCHAR,
    protocol                VARCHAR,
    path                    VARCHAR,
    data                    VARCHAR,
    headers                 VARCHAR,
    query_string            VARCHAR,
    referer_id              UUID,
    device_id               UUID,
    browser_id              UUID,
    platform_id             UUID,
    created_at              TIMEUUID,
    PRIMARY KEY (id, created_at) ) WITH CLUSTERING ORDER BY (created_at DESC);

create table referers(
    id                      UUID PRIMARY KEY,
    host                    VARCHAR,
    path                    VARCHAR,
    first_seen              TIMESTAMP,
    last_seen               TIMESTAMP,
    seen_count              INT );

create table browsers(
    id                      UUID PRIMARY KEY,
    key                     VARCHAR,
    version                 VARCHAR,
    first_seen              TIMESTAMP,
    last_seen               TIMESTAMP,
    seen_count              INT );

create table platforms(
    id                      UUID PRIMARY KEY,
    key                     VARCHAR,
    version                 VARCHAR,
    first_seen              TIMESTAMP,
    last_seen               TIMESTAMP,
    seen_count              INT );

使用此模型,如果我想要例如"来自status_code 200"我将不得不创建一个二级索引,对于引用者,设备等都是一样的。

所以我需要创建单独的表格" visits_by_referers"," visits_by_devices"像这样:

create table visits_by_referers(
    visit_id                UUID,
    device_id               UUID,
    PRIMARY KEY (visit_id, device_id)
);

还是我完全错了,cassandra不适合这个?

谢谢:)

1 个答案:

答案 0 :(得分:1)

直到3.0出现物化视图(https://issues.apache.org/jira/browse/CASSANDRA-6477),对于这种类型的用例来说,这将是巨大的,你需要创建单独的表,以便通过引荐来源'如果你打算直接查询。

很多人倾向于使用一个大表,然后覆盖类似Spark的东西来实际将数据读入内存并进行更复杂的查询。