请原谅我可能会在其他地方解释的问题,但我没有找到一个简单而简单的转换/解释SQL模型给Cassandra Model。
让我们说我有一个用于为组织中的员工详细信息和记录设计数据库结构的用例。在SQL(拥有多年经验)中,我可以使用规范化技术对其进行建模,但是进入NoSQL世界,我需要花一些时间来为NoSQL设计DB,因此我在这里(为了更好地理解)
有人可以将这个SQL模型转换为NoSQL(Cassandra)模型,从而为很多新手(比如我)提供了一个简单而简单的SQL转换到NoSQL迁移。
由于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';
让我知道如果我能提供更清晰的问题!
答案 0 :(得分:2)
您的结构不正确,因为您无法表达任何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 Enterprise版)具有SolR扩展,可以让您表达更丰富的查询。在这种情况下,您的模型可能是正确的。