SQL 到 Cassandra 数据模型结构

SQL to Cassandra Data Model Structure

请原谅我问了一些其他地方可能已经解释过的问题,但我没有找到一个简单明了的 conversion/explanation of SQL 模型到 Cassandra 模型。

假设我有一个为组织中的员工详细信息和记录设计数据库结构的用例。在 SQL(有多年的经验)中,我可以使用规范化技术对其进行建模,但是进入 NoSQL 的世界,我需要一段时间才能为 No[= 设计 DB 33=],所以我在这里(为了更好地理解)。

谁能把这个SQL模型转换成NoSQL(Cassandra)模型,从而给很多新手(比如我)一个简单明了的SQL到没有SQL 迁移。

既然SO是基于一个概念先试后问,所以我也想到了一个结构。让我知道这是否有效。

因为数据在Cassandra中可以反规范化,所以想到了这个结构

Emploee(ColumnFamily) = {
    "01234"(EmployeeId) : { 
        "EmpName" : "Jack",
        "mail" : "Jack@xyz.com",
        "phone" : ["9999900000","8888888888"],
        "DOB": 4/1/91,
        "Contact":{ "Street" : XYZ2 , "City":ABC, "Pincode":PQR},
        "UnitID":{ "UnitName" : XYZ , "UnitHead":ABC},
        "RoleID":{ "Designation" : Manage , "Band":Something},
    },
    "01235"(EmploeeId) : { 
        "EmpName" : "Jackyyy",
        "mail" : "Jackyyy@xyz.com",
        "phone" : ["99565600000","88888846468"],
        "DOB": 4/1/91,
        "Contact":{ "Strreet" : XYZ2 , "City":ABC1, "Pincode":PQR},
        "UnitID":{ "UnitName" : XYZ1 , "UnitHead":ABC1},
        "RoleID":{ "Designation" : Faculty , "Band":Something},
    },

    and so on...
}


Projects(ColumnFamily) = {
    "1213"(ProjectId) : { 
        "EmpID" : [01234,01235],
        "StartDate" : 4/1/2001,
        "EndDateDate": 4/1/2012,
        "ClientName": Apple
        "Description": "Something",
    },

    and so on...
}


Attentance Detail(ColumnFamily) = {
    "1213"(DetailId) : { 
        "EmpID" : 01234,
        "SwipeInTime" : Something,
        "SwipeOutTime": Something,
        "Status": Apple
    },

    and so on...
}

首先请让我知道这个结构是否正确。如果是,我将如何设计以下查询?

1) Select employee whose phone number = something;

2) Select employees who lives in 'XYZ' location;

3) Select employees whose age is > 40 years ;

4) Select employee whose Designation is a 'Manager' of Unit Name 'XYZ' ;

5) Select employees who work for over 1o hours a day;

6) Get names(not IDs) of all employees wh were working for client 'Apple';

如果我能更清楚地说明这个问题,请告诉我!!!

您的结构不正确,因为您无法表达您的 6 个查询中的任何一个:-(

Cassandra 建模的主要规则是:从您的查询开始并进行非规范化。在您的例子中,您将有 6 个表 employee_by_phone、employee_by_location、employee_by_age 等等。 http://www.datastax.com/dev/blog/basic-rules-of-cassandra-data-modeling

但是,如果您有很多这样的多条件查询,Cassandra(Datastax 企业版)具有 SolR 扩展,可让您表达更丰富的查询。在这种情况下,您的模型可能是正确的。