Database design Cassandra数据库数据模型:我的模式设计

Database design Cassandra数据库数据模型:我的模式设计,database-design,nosql,cassandra,database-schema,Database Design,Nosql,Cassandra,Database Schema,我需要为测试系统实现一个数据库。它用于存储测试数据,以便将来进行统计分析。它必须以卡桑德拉为基础 我已经设计了一个模式,但由于这是我第一次尝试NoSQL设计,我想得到一些反馈 我将首先描述我希望保存的数据,然后描述两个基本查询,最后介绍我建议的设计 我打算使用Cassandra 1.1,所以我尝试在我的设计中使用复合柱,但是,请随意推荐超级柱或任何看起来正确的东西 数据: 我们正在测试的基本单元是外星人。每个外星人都有一个唯一的ID。每个外星人都有许多身体部位。而且,每个外星人都是外星人家庭的一

我需要为测试系统实现一个数据库。它用于存储测试数据,以便将来进行统计分析。它必须以卡桑德拉为基础

我已经设计了一个模式,但由于这是我第一次尝试NoSQL设计,我想得到一些反馈

我将首先描述我希望保存的数据,然后描述两个基本查询,最后介绍我建议的设计

我打算使用Cassandra 1.1,所以我尝试在我的设计中使用复合柱,但是,请随意推荐超级柱或任何看起来正确的东西

数据: 我们正在测试的基本单元是外星人。每个外星人都有一个唯一的ID。每个外星人都有许多身体部位。而且,每个外星人都是外星人家庭的一部分。这些家族有唯一的名字

当我们运行一个测试时,我们在一个外星人群体的几个身体部位上运行它。例如,我们选取几个家庭,对他们所有的眼睛和嘴巴进行测试

有几种测试。我们用自己的测试唯一ID记录每个测试

当我们运行一个测试时,我们每隔几分钟对所有相关的外星人身体部位进行采样,并收集一些统计数据

基本查询:
  • 每一个家庭或外来或独特的身体部位-它参加的测试
  • 每个测试ID-哪些家庭或外国人或独特的身体部位参与了测试
  • 未来,所有数据的统计分析
  • 我的设计尝试: 就是这样。因为我是一个真正的数据库初学者,尤其是Cassandra,我非常感谢任何意见


    谢谢您的时间。

    您的数据集最终会有多大?有时,我们使用PlayOrm在noSQL中存储关系数据,这非常有效,而且表可以存储到X百万行中。如果您要进入数十亿/万亿行,那么我们将使用PlayOrm对相同的数据进行分区,以便进行扩展

    那么,您需要扩展能力吗?您可能希望查看宽行模式(PlayOrm大量使用该模式)。宽行可以帮助您为内容编制索引,以便快速查找

    我真的不明白你这部分的东西

    TestsData : { // Column Family - we sample each test every couple of minutes...
        [TestID][AlienID][Bodypart][MinutesFromTestStart]: { //Composite Columns as Rowkeys
            Temperture: 30 // column
            Size: 5 // column
        }  
    }
    
    这里不应该有更大的争议吗?其中testid是行键,其他数据有许多复合名称?宽行不应该大于1000万列,所以确保没有测试数据行会超过这个值。因此,可能会发生广泛的争吵

    testid->alienId:fk23=null、alienId:fk25=null等。等。温度=30,大小=5

    后来,,
    院长

    首先,感谢您抽出时间回答。我将尝试解释TestsData要求。我们对外星人(每个身体部位)进行测试。测试需要不同的时间,让我们选择一个需要10分钟的测试。一旦我们开始测试,我们每分钟都会对外星车身部件的温度和尺寸进行采样,因此我们需要每分钟记录每个车身部件的数据。这就是为什么我提出的综合索引是[TestID][AlienID][Bodypart][MinutesFromTestStart],数据是两列。我不熟悉宽行模式,我设计错了吗?关于PlayORM的建议-谢谢,但我必须使用Cassandra。不确定你的意思是什么,因为PlayORM位于Cassandra之上?你的意思是说你必须用astyanax还是用hector?那个评论对我来说更有意义。我不明白PlayORM是什么。我还以为那是另一个NoSQL数据库。我目前正在.NET中开发,所以我使用FluentCassandra。这就是你的意思吗?这个问题似乎离题了,因为它是一个代码审查请求。
    TestsData : { // Column Family - we sample each test every couple of minutes...
        [TestID][AlienID][Bodypart][MinutesFromTestStart]: { //Composite Columns as Rowkeys
            Temperture: 30 // column
            Size: 5 // column
        }  
    }