采用NoSQL技术的云存储解决方案渐渐成熟,但SQL数据库思想还是占据主导地位。这可能导致使用SQL的方式来解决NoSQL的数据建模问题。本文根据作者的Cassandra项目开发和项目实施经验,对NoSQL建模做一些概要性的指导。文章没有具体的语法指导数据建模,这些问题请参考apache网站。 Cassandra已经升级为apache组织的顶级项目。目前保持非常快的开发升级速度。Apache已经放出1.0beta版本。不同版本的Cassandra具有不同的特性,因此,在开发的角度也可以采用不同的数据模型。 Cassandra模型可以用一个5维数组表示,相对应keyspace、ColumnFamily(SuperColumns)、Key、Columnes、Value这5个维度。在获取数据采用get语法,以get key为最大获取数据维度,columns为最小获取数据维度。 获取数据可以这样理解:由于Key值索引是缺省索引,只支持精确查找。如果我们希望最快速的找出一个班的学生,最简单的方法是以班级代码为Key建模。如果我们希望最快速的找出一个年级的学生,当然以年级代码为Key建模。 这样的解决方式会带来一个问题。在以关系型数据库为主的各种应用中,我们习惯了使用条件语句查找数据,从整个数据集中获取需要的数据。如:where年级=‘3’或w电视棒 here班级=‘302’。SQL可以简洁的建立应用的模型。而Cassandra似乎不能这样。 实际情况也确实如此。在Cassandra 0.6版本时,除非使用代码,否则很难像SQL一样方便解决这个简单的问题。如果仅这样思考问题,同样也说明我们还在使用SQL的经验和方式来思考。关系型数据库应用系统经验如:3个经典范式,甚至PK、FK、字典表、schema等无一不主导思维。所以,我们需要改变这种思维。 Cassandra不是关系型数据库,其CF的设计大约是以一类查询为基础。这个观点有两层理解:1、以应用的角度来考虑数据存储;2、数据模型关键是在第二级,也就是ColumnFamily。例如:查询一个年级的学生,就应该以年级为CF来组织数据;查询一个班级的学生,就应该以班级为CF来组织数据。 本文由 http://www.gqdsb.com/ 整理并发布! |