如何在cassandra中正确设计数据模型来存储json

时间:2014-07-28 08:20:09

标签: json cassandra

我正在学习cassandra以了解如何建模数据以便最好地管理这样的json:

{
    "summary": {
        "elem": [
            {
                "score": 15.8,
                "value": "xxx"
            },
            {
                "score": 15.7,
                "value": "yyy"
            },
            {
                "score": 13.9,
                "value": "zzz"
            }
        ],
        "sens": [
            {
                "score": 23,
                "start": 0,
                "end": 210,
                "value": "kkk"
            },
            {
                "score": 12.1,
                "start": 212,
                "end": 326,
                "value": "nnn"
            }
        ]
    },
    "cats": [
        {
            "name": "c1",
            "val": 10245,
            "sens": [
                {
                    "val": "mmm",
                    "els": [
                        {
                            "start": 25,
                            "end": 38,
                            "value": "ccc"
                        }
                    ],
                    "score": 810,
                    "start": 0,
                    "end": 210
                },
                ...
            ]
        },
        ...
    ],
    "ecv": {
        "ens": [
            {
                "val": "bbb",
                "text": "jjj",
                "matches": [
                    {
                        "start": 2706,
                        "end": 2719,
                        "value": "aaa"
                    }
                ],
                "properties": [
                    {
                        "name": "id",
                        "value": "0001"
                    },
                    {
                        "name": "uni",
                        "value": "V"
                    },
                    ...
                ]
            },
            ...
        ],
        "rels": [
            {
                "ens": [
                    {
                        "text": "pp",
                        "start": 0,
                        "end": 7,
                        "value": "uuu"
                    },
                    {
                        "type": "rrr",
                        "start": 25,
                        "end": 38,
                        "value": "www"
                    }
                ],
                "act": {
                    "name": "rtr",
                    "type": "fff",
                    "start": 122,
                    "end": 125
                },
                "sens": {
                    "value": "ddd"
                }
            },
            ...
        ]
    },
    "doms": [
        {
            "value": "yyy",
            "fas": [
                {
                    "val": "ccw",
                    "sens": {
                        "start": 0,
                        "end": 210,
                        "value": "xxx"
                    },
                    "els": [
                        {
                            "start": 169,
                            "end": 178,
                            "value": "bhh"
                        },
                        ...
                    ],
                    "ents": [
                        {
                            "val": "ents1",
                            "type": "xxx",
                            "matches": [
                                {
                                    "start": 0,
                                    "end": 7,
                                    "value": "bbb"
                                }
                            ]
                        },
                        ...
                    ]
                },
                ...
            ]
        },
        ...
    ]
}

我使用了几个月的MongoDB,所以我认为将整个文档写入mongoDB集合很简单。

我无法知道如何设计我的cassandra模型以存储json。

有人可以给我一个开始的方式吗?想想在Cassandra" ?

谢谢!

1 个答案:

答案 0 :(得分:2)

理解的重要一点是Cassandra中没有“一个存储”模型。您有一个传统的ER模型,您可以从中导出逻辑模型,并结合约束和性能要求来获得最终的物理模型。你在cassandra中的表是最后一种形式,其他形式是“在你的头脑中”或记录在案 - 想法而不是表格。那么,你怎么去那些桌子?你考虑的是你的疑问。您的表符合您的查询,因此在不知道访问模式的情况下,没有办法说明您应该如何存储它。

Cassandra中的数据存储在分区中。分区由主键中的第一个键标识。分区中的所有行一起存储在一台计算机(和副本)上。如果您的查询命中分区,则速度很快。如果它遇到多个分区(查询中的pk),则速度较慢。如果它击中所有分区,它是最慢的。但是,如果所有查询都遇到一个分区,则会出现热点(某些服务器使用很多,而其他服务器则处于空闲状态)。这在大型集群中可能很糟糕。

在分区内,数据按照聚类键(主键中的“其他”键)按顺序排序。如果已指定所有先前的群集密钥,则只能对群集密钥执行过滤(where)查询。此外,您只能对谓词中的最后一个群集键进行范围查询(>,< etc.)。您还可以创建辅助索引,这可以让您查询群集密钥要求之外的相等条件,尽管它们较慢并且更新为异步。

那里有很多复杂的问题,你可以执行的查询受到更多限制(如果考虑任何类型的性能)。因此,“cassandra方式”是考虑您的查询模式,然后根据这些模式存储数据。如果您有多个存储模式,请以不同的形式复制相同的信息。存储数据没有“一种真实的方式”。

相关问题