Java开发2.0: NoSQL - 编程入门网
Java开发2.0: NoSQL时间:2011-09-04 IBM Andrew Glover简介:在 Web 2.0 时代,NoSQL 数据存储(比如 Bigtable 和 CouchDB)从 边缘进入主流,因为它们能够解决伸缩性问题,而且能够大规模解决该问题。 Google 和 Facebook 只是已经开始使用 NoSQL 数据存储的两家知名公司,我们 仍然处于使用 NoSQL 数据存储的早期阶段。无模式数据存储与传统的关系数据库 存在根本区别,但是利用它们比您想象的要简单得多,尤其是当您从一个域模型 而不是一个关系模型开始时。 关系数据库已经统治数据存储 30 多年了,但是无模式(或 NoSQL)数据库的 逐渐流行表明变化正在发生。尽管 RDBMS 为在传统的客户端 - 服务器架构中存 储数据提供了一个坚实的基础,但它不能轻松地(或便宜地)扩展到多个节点。 在高度可伸缩的 Web 应用程序(比如 Facebook 和 Twitter)的时代,这是一个 非常不幸的弱点。 尽管关系数据库的早期替代方案(还记得面向对象的数据库吗?)不能解决真 正紧急的问题,NoSQL 数据库(比如 Google 的 Bigtable 和 Amazon 的 SimpleDB)却作为对 Web 的高可伸缩性需求的直接响应而崛起。本质上,NoSQL 可能是一个杀手问题的杀手应用程序 —随着 Web 2.0 的演变,Web 应用程序开 发人员可能会遇到更多,而不是更少这样的应用程序。 在这期 Java 开发 2.0 中,我将向您介绍无模式数据建模,这是经过关系思 维模式训练的许多开发人员使用 NoSQL 的主要障碍。您将了解到,从一个域模型 (而不是关系模型)入手是简化您的改变的关键。如果您使用 Bigtable(如我的 示例所示),您可以借助 Gaelyk:Google App Engine 的一个轻量级框架扩展。 NoSQL:一种新的思维方式? 当开发人员谈论非关系或 NoSQL 数据库时,经常提到的第一件事是他们需要 改变思维方式。我认为,那实际上取决于您的初始数据建模方法。如果您习惯通 过首先建模数据库结构(即首先确定表及其关联关系)来设计应用程序,那么使 用一个无模式数据存储(比如 Bigtable)来进行数据建模则需要您重新思考您的 做事方式。但是,如果您从域模型开始设计您的应用程序,那么 Bigtable 的无 模式结构将看起来更自然。 为实现伸缩性而构建 伴随高度可伸缩的 Web 应用程序面临的新问题而来的是一些新的解决方案。 Facebook 并不依赖于一个关系数据库来解决其存储需求;相反,它使用一个 “ 键 / 值” 存储 —主要是一个高性能 HashMap。称为 Cassandra 的内部解决方 案也被 Twitter 和 Digg 使用,并在最近捐献给了 Apache Software Foundation。Google 是另一个 Web 实体,它的爆炸式增长要求它寻求一个非关 系数据存储 —Bigtable 就是寻求的结果。 非关系数据存储没有联接表或主键,甚至没有外键这个概念(尽管这两种类型 的键以一种更松散的形式出现)。因此,如果您尝试将关系建模作为一个 NoSQL 数据库中的数据建模的基础,那么您可能最后以失败告终。从域模型开始将使事 情变得简单;实际上,我已经发现,域模型下的无模式结构的灵活性正在重新焕 发生机。 从关系数据模型迁移到无模式数据模型的相对复杂程度取决于您的方法:即您 从基于关系的设计开始还是从基于域的设计开始。当您迁移到 CouchDB 或 Bigtable 这样的数据库时,您 的确会丧失 Hibernate(至少现在)这样的成熟 的持久存储平台的顺畅感觉。另一方面,您却拥有能够亲自构建它的 “绿地效果 ”。在此过程中,您将深入了解无模式数据存储。 Java开发2.0: NoSQL(2)时间:2011-09-04 IBM Andrew Glover实体和关系 无模式数据存储赋予您首先使用对象来设计域模型的灵活性(Grails 这样的 较新的框架自动支持这种灵活性)。您的下一步工 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |