- 浏览: 3502414 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wanglf1207:
EJB的确是个不错的产品,只是因为用起来有点门槛,招来太多人吐 ...
weblogic-ejb-jar.xml的元素解析 -
qwfys200:
总结的不错。
Spring Web Flow 2.0 入门 -
u011577913:
u011577913 写道也能给我发一份翻译文档? 邮件437 ...
Hazelcast 参考文档-4 -
u011577913:
也能给我发一份翻译文档?
Hazelcast 参考文档-4 -
songzj001:
DbUnit入门实战
在过去的日子,当你有数据需要存储管理的时候,办法很简单:安装一个正式的数据库,将需要存储的数据录入进去,让系统帮你进行分类管理,而你只需要花时间
去选择哪家数据库提供商。现在事情并非如此,一些新兴数据库工具开始泛滥,赋予了“数据库”这几个字眼更多的含义,打破了传统数据库关系模型。有经验的数
据库管理员称之为“玩具”,认为它们有很严重的威胁,而这些威胁就是来自这些新兴的数据库。一些傲慢的家伙为新兴数据库很好用,速度很快,满足他们手头的
需求,置威胁于不顾。
非关系型数据库正在吸引人们的注意,因为它们可以忽略许多的规则,而这些规则正是经验丰富的数据库管理员积累的深刻教训。问题是现在这些规则的条条款款已
成为一种束缚,使得很难创建一个真正强大的、让多台计算机一起运行的数据库系统。因为所有的Web应用程序设计者都梦想构建一个多机运行的应用程序,保存
所有用户的所有数据,要想做到这些,有些老的规则需要避开,甚至是打破。
首当其冲的事情就是摒弃旧的
JOIN操作
。
大学生曾经严格的按照课后作业的要求,如何标准化数据,将一个表格划分为许多的部分。那个时候磁盘非常贵,数据标准化工作显得额外重要。问题当数据分散在
不同机器上的时候,JOIN操作真的使得速度变得很慢。现在磁盘空间非常便宜,许多数据模型并没有从数据标准化中受益,因此JOIN操作很容易就被摒弃。
立即一致性和最终一致性的差别依赖数据的重要性来定。那些听到这些新兴数据库就要拿心脏病药的保守者通常是银行的程序员,它们希望确保每天结束后收支相等。毕竟银行的领导不能忍受由于失败的数据库事务而导致帐目出错。
但是许多现代的Web站点不会因为某个事务失效而不能运行的。我看见Facebook经常有小故障。不会因为某些评论数据丢失了就不能运行了。这些网站不
会像银行那样苛刻关注帐目清算,它们不需要关系数据库所有的功能。(一些人开玩笑说银行应该把购买Oracle许可证的钱拿出来成立一个基金,赔偿那些因
为失败的事务操作导致钱丢失的人们。)
为了更好地理解这些非关系型数据库的扩展层,我捡了几个进行测试,构建了几个测试应用程序。发现它们主要的命令操作不会超过这三个:插入、更新、删除。有
一些提供群集,有一些只能提供某种服务,有一些夸大其词说接管整个服务器栈,有一些比其它的数据库提供更好的AJAX工具。但是,他们中没有一个合适,它
们都不能供银行来使用。
文中我没有介绍其它几个有趣的数据库,一是由于本文篇幅限制,二是因为它们和我以下提到的几个没有多大的区别。举个例子,Sun公司正在
构建一个关系型数据库,称之为Derby,用Java虚拟机一起使用。Oracle也有它自己的嵌入式数据库,叫做Berkeley
DB,但是现在称之为Oracle Embedded
Database。有些程序员甚至创建了低费用的程序库,将对象直接写入到磁盘中。这些产品也延伸了“数据库”这几个字眼的含义,但是我不准备在这里陈述
它们。
Amazon SimpleDB数据库
SimpleDB是Amazon推进云计算服务计划中最为高级和最似云技术的组件之一。一旦你签约雇佣Amazon的服务,获得通行密码,你就能将包含键
值的Web Service
XML文件装载到SimpleDB中去,只要你持续支付费用,它将一直为你存储这些数据。你不需要考虑安装任何应用程序或者备份什么。Amazon在它的
Web service墙后已经为你隐藏了所有这些工作。
SimpleDB是两级分层结构。最上面的一级是"domain",第二级是"item"。在你选择domain 和item
名之后,你就写入了键值。SimpleDB相对来说有丰富的API,拥有对数据排序能力,甚至具备计算出匹配查询结果的item数目的能力。你甚至能写查
询语句,可以查询那些不从某个特定字符串开始的值。这或许和我们使用的SQL和Oracle数据有很大的区别,但是这些低租金的数据库也有自身的缺点,甚
至不能对结果集进行排序。
SimpleDB设计初衷是和Amazon的Simple Storage Service
(S3)一起使用的,但是每对键值的大小限制在1024字节。这对于很多的字符串来说,已经足够了,但是对于许多的内容引擎是不够的。因此你在S3中存储
的是数据的指针。
现在使用类似JOIN这样的操作还有一些限制,需要多种调用。每个查询只能运行5秒钟。结果仅能保持250个item。每个item仅有250对。还有许多的常见操作有限制,有人开始思考SimpleDB是给我们的生活带来了便捷或是麻烦。
Amazon开始重写API,企图得到更多更好的认证。到2009年9月,整个SSL都会运行call,提供安全和认证。Amazon也增加了安全机制,使用更多的复杂的哈希算法来将更多的请求打包。这些仅仅是Amazon取得的小的改进。
该公司也创建了更多的程序库,让服务的使用更加简单。这里有许多的软件包和主流以及一些少见的语言结合使用。文档相当广泛,很容易找到。通常你可以很快启动你的工作,开始存储数据所用的时间也缩短了。
现在价格也很合适。Amazon最近将存储的价格从1.5美元降到25美分每G字节。公司将收费透明化,目的是激励用户来计划他们的消费预算。
Amazon有一套先进的条款来处理使用期限问题。有许多的条款来处理你可能遇到的问题,有一些吸引了我的注意力。举个例子,Amazon申明,“我们可
能删除最近6个月存在SimpleDB中却没有访问的内容,但是不用负任何责任。”这对于只是为了给系统做测试的人来说很容易接受。从措辞来
看,Amazon此举的目地就是为了保持它的数据中心良好运行。
还有其他的一些问题。举个例子,使用期限条款包括一长列禁止数据,如“助长非法活动”,带有“种族、性别、宗教、国籍、残疾、性取向、年龄”歧视的数据都
是禁止的。这存在一个问题。想像一下如果为某个教堂开展反男同性恋婚姻运行了一个网站。这听起来你确实有性取向歧视。但是,如果你是开展男同性恋婚姻的宣
传活动,反对这些教堂的呢,这个时候还能说你是在歧视这些基本的宗教信仰吗?
我对那些正在分析处理这些抱怨的律师感到遗憾,但是至少他们可以高枕无忧了,因为他们知道这些数据可以以任何理由或者是没有理由的删除掉。如果你仅使用免
费的服务,Amazon不会给你任何通知,就会删除你的数据,但是你如果是付费用户,就承诺有60天的提醒通知,在期限内你就能将你的数据处理好。
Google App Engine
Google App
Engine本质上不是一个数据库。他是一种云技术,用于分布式Python应用程序,它是和自己隐藏在内部某个地方的数据库一起工作的。不首先通过应用
程序层来访问数据库是不可能的。但是封装一个数据库命令和格式化请求数据并不困难,因此我们可以认为App
Engine是一个数据库,只不过这个数据库附加了一个以Python语言写的嵌入程序。
这种额外定制的层非常有用。许多关于其它“玩具”数据库的抱怨围绕在某个缺少的操作导致不能找到正确的结果。如果你想给这里的数据库增加一些功能,你能够
用Python语言自己开发出来。如果你想要有JOIN操作,你能自己用Python语言写,也能同时定制内存缓存器。这对于那些让用户存储他们自己数据
的Web应用程序特别有用。如果你需要增加安全控制权限,限制每个用户看到自己应该看到的内容,你也可以用Python语言实现。
App
Engine数据存储比Amazon的SimpleDB更具结构结构性,它的结构性很大一部分来自Python的对象模型。你存储的不是成对的键值,而是
Python对象,这些对象被定义成非常类似于SQL模式。你能为每列设置数据类型,在你需要的列之间进行索引。事务机制也深深的和Python联系在一
起,因为每个事务实际上就是一个Python函数。这么说有一些过分简单化,因为对这个Python函数还是有一系列的限制的(如每个数据项只能更新一
次)。好的消息是Google数据项正在创建特殊的事务方法,对一些普通行为(如“创建”或者“更新”一行)进行抽象。
检索有意做成类似于SQL查询,实际上,Google提供它自己的类SQL语言,GQL。使用的时候,GQL被解析成查询语句。App Engine还有一套基于Python的方法集,方法集合拴在一起处理数据集合和查询。你不需要浪费分析查询周期。
值得一提的是Python栈包括了一些最好的数据库也不具备的功能特性。有一个程序库来操作图像文件,通过剪切和Goolge特有的“I feel
lucky”功能对图片进行修补。你也可以将数据存储为Goolge文档,电子表格和日程数据项。起初App
Engine看起来仅仅像是一个数据库,但是你也能容易的在Google栈里进行数据抽取。
直到几周前,App
Engine还在测试阶段,使用它是免费的。只要你的使用空间大小在基本的限额之内,它仍旧是免费的。另外,Google的收费机制和Amazon极为相
似。存储的价格比Amazon的更便宜(每月每G字节12美分),带宽的收费是相同的(10美分没G字节)。
Google的使用期限责任制与Amazon的不同。你需要制定一个个人隐私策略,保护你用户的数据。如果你的用户违反了版权规定,你必须反应给
DMCA(千禧年数字版权法),你不这么做的话,Google将会为你这么做。Google保留在任何时间以任何理由删除内容的权利。“你同意
Google删除、丢失任何存储内容和服务试用期传送内容、保持的通信而不负任何责任。”
这些条款越来越受到关注。现在Google承诺在决定注销账户前预留90天的时间让你将数据从服务器取走。其它受关注的条款在DMCA的问题上,这使得许多人都不解。
存在这么一个问题,如果你决定离开Google或者说Google让你离开时该怎么办。Google发布了一个不错的开发工具,让你轻松在本地机器上测试
你的应用程序。使用这些工具在你机器上测试是没有技术问题的,除非你没有支持类云技术的功能。包括测试在内的数据存储自身是不会自动复制自己的,但是在自
己本地机器上却能实现其它的功能。像以前一样,有一些法律问题,因为“许可证的唯一目的就是让你使用和享受提供服务的好处。”
Apache CouchDB数据库
毫无疑问我们需要使用云技术来享受这些新的服务。CouchDB是众多开源项目中的一个,该项目构建了一个用于存储key-value
pairs的数据库。这个项目使用Erlang语言编写的,受Apache
软件基金支持。你可以下载源文件在任何机器上安装,然后编译运行它们。使用它是没有费用的,除了你需要花钱购置服务器。
CouchDB与Amazon的工具是相似的,但是它有一些特别之处。你仍旧以行的形式来存储key-value
pairs,但是这些key-value pairs可以是任何标准的JSON(JavaScript Object
Notation)数据类型,如布尔和数字类型。值的范围不局限于1024字节长度的字符串,有办法可以让其存储长数值,甚至是图形。所有的请求和响应格
式化为JavaScript。没有基于XML的Web Services,只有JSON.
最大的不同在于写查询语句。CouchDB可以通过JavaScript单独写map functions和reduce
functions。一个简单的查询或许仅仅就是一个map
function,带有一个“If”子句来测试数据比某个数值大还是小。只有在你试图计算统计由map
functions查询的数据时才会用到reduce
functions。发现计算行的个数很容易办到,但是也有可能丢失了一些其它很酷的特性,因为map
function只能由JavaScript来写。我除了发现计算出匹配的数目,至于其他的非学术的用途我还没有弄清楚。文档包括了一个给人印象很深刻的
reduction
function,用来归并统计的,但是我不知道CouchDB真的是否是处理这类事情的正确工具,如果你需要更复杂的统计,妥当的就是坚持使用传统的数
据库,获得统计报表。
这个项目还有一些限制的。项目的首页称之为“一种分布式,容错,自由面向文档模式的数据库,”没有一些人工干预你是不会获得分布式和容错功能的。
CouchDB有一个好看的AJAX用户界面,包含了一个form表单,能让你复制数据库。但是还不是自动的。
CouchDB计划会增加存取控制和安全模式,但是没有以文档的形式展示出来,在API中也没显示。他们设计的初衷就是使用纯JavaScript,取代
SQL,或者其他的语言,这是一个好的主意,你不会获得或者失去权限阅读文档,你能写JavaScript函数来返回true或者false结果。
使用纯JavaScript也并非坏事。当我使用这些数据库的时候,我很快发现有人能够在客户端开发一个安全模型层,使用一些不错的加密技术。在客户端加强安全控制,就能减少服务器端的工作,我在《半透明数据库》一文中有一些介绍。
这个特点正在驱使一些极端用户使用CouchDB作为整个服务器栈。J. Chris
Anderson,项目的委托人之一,写了一篇文章,证明CouchDB是一个应用程序服务器的全部所需。用于显示和与数据交互的业务逻辑是用
JavaScript编写的,从CouchDB下载后是一个JSON数据包。
在Anderson的眼里,当所有的功能都能用JavaScript实现,在服务器上使用Ruby、Python、Java、
PHP没有什么大的意义。这种看法或许有些极端,因为总会遇到一些情况,客户机器不能保证能正确的实现一些功能,客户端的客户比我们知道的东西少。像
CouchDB这种轻量级的工具使得人们开始考虑完成一项工作真正需要多少代码。
Persevere数据库
初一看,Persevere数据库像其它大多数数据库一样。将键值对录入进去,它就将其存储起来。但是,这只是一个开头。Persevere提供了完善的
对象分级结构,使得用户可以给数据库增加更多的结构,提供比上一代传统数据库更多的form。Persevere更多的表现出是一种JavaScript
对象的后端存储设备,JavaScript对象由像Dojo这样的AJAX工具包创建。
Persevere引以为自豪的是它的“schema-free”,这一特点使得它与其它数据库有很大的区别。Persevere可以让你随心所欲的增加
schema。Persevere并非把分级结构的顶层称为一个domain(SimpleDB这么称呼),也不称之为文档(CouchDB这么称
呼),Persevere称之为对象,它甚至可以让你创建对象的子类。如果你想违背规则,你也能坚持某些字段使用某一类型,但是这是不推荐的。
Schema规则是可选的。
由于Persevere与Dojo连接紧密,Persevere提供了大量的连通性。你可以创建网格,树形窗口小部件,接着将其直接链接
到JsonRestStore,窗口小部件让你编辑数据。 你可以通过20行的JavaScript代码就能远程访问一个数据库。
我遇到过许多的小的误操作,这些误操作可能是由于我缺乏经验导致,而不是潜在的Bug。当我准确的弄清楚如何做的时候,一些操作就会正确
启动。Persevere本身并不是特别需要掌握,但是AJAX框架是你直接面对的。来自Dojo的文档比大多数AJAX框架要好,但是你得花一些时间来
学习Dojo,才能掌握隐藏在Persevere表面后的潜在复杂性问题。
云技术和群集
尝试了这些数据库之后,我能明白为什么有人会一直称它们为“玩具”。它们功能有限,即便有新的功能,但是这些新的功能会约束你的选择。许多次我意识到
SQL世界的标准功能让生活更加简单。许多基于标准SQL的工具,如报表引擎,不能连接这些新兴的数据库。使用MySQL或者Oracle这些数据库能够
完成许多重大的功能。
但是,这不代表将来在我的项目中我不去使用这些新兴的数据库。它们是固态数据存储,与AJAX集成得如此紧密,使得开发更加容易。另外,多数Web站点不
需要MySQL或者Oracle的所有功能,JOIN-free模式对许多普通数据结构仍旧非常有用,包括一对多关,一对一关系型数据,甚至多对一关系。
另一个问题是是否使用云技术或者构建你自己的群集。Google和Amzon都提供多机服务承诺,CouchDB和Persevere是不能匹敌的。
Persevere团队声称在将来将会扩展。但是很难预料Amazon和Google的承诺有多好。如果Amazon和Google丢失了一个硬盘怎么
办?如果它们丢失了一个机架怎么办?他们还没有做出很清晰的承诺和使用期限所负的责任。
举个例子,Amazon的条款重复声明了很多次:“我们对于为授权的访问、改变、删除、损害、丢失任何你的内容、应用程序,或者你提交的数据、服务帐号都不负责任。”
我不是说在责备Amazon或者是Google,因为谁都不知道谁应该对丢失的事务负最终的责任。有可能是任何一个程序员,实际上也很难判断谁破坏的。但
是,我们知道更多信息会更好。SimpleDB中的数据是存储在RAID磁盘中吗?当同一地区发生地震,飓风或者火灾时别的地区另外的备份吗?在线备份社
区正准备开始提供这类服务的细节了,但是云技术还没有计划这样做。
所有这些顾虑让我们清楚的认识到他们仍旧是玩具数据库,打破了传统数据库的规则,对那些可以忍受数据丢失的应用程序是合适的。它们很有趣,有快,在价格方
面也很合适,你的注意力可以不用放在选择数据库提供商,而是放在如何解决没有JOIN操作怎么办的问题上。
发表评论
-
oracle复制表数据,复制表结构
2011-07-25 21:19 362021.不同用户之间的表数据复制 对于在一个数据库上的两个 ... -
删除 SQL Server 的所有已知实例
2011-04-05 18:42 2030如果提示实例已经被注册,无法安装,那么: 删除 SQL ... -
【SQL】安装 SQL SERVER MsiGetProductInfo 无法检索 Product Code 1605错误 解决方案
2011-04-05 17:10 4847重装数据库服务器上的SQL SERVER 2008 上遇到了以 ... -
Mysql Using Master/Slave Replication with ReplicationConnection
2011-03-24 15:19 1983Starting with Connector/J 3.1.7 ... -
oracle网络配置listener.ora、sqlnet.ora、tnsnames.ora
2010-12-03 12:36 33336oracle网络配置 三个配置文件 listener.ora ... -
Oracle XE的数据库创建过程
2010-12-02 22:55 4349今天安装了Oracle XE,发现并没有自动创建数据库。趁着 ... -
实现数据库TPC性能测试的开源及商业软件
2010-12-02 01:11 3119商业软件 Benchmark Factory ... -
MySQL压力测试工具mysqlslap
2010-11-07 17:13 1768MySQL从5.1.4版开始带有一个压力测试工具mys ... -
一台机器上安装多个mysqld实例
2010-11-06 16:09 2167一台机器安装多个mysqld实例 1. ps -aux | ... -
MySQL数据库双向同步
2010-08-25 20:23 40831. 主从关系的同步 master端 192.168.5 ... -
MySQL 数据库之间的同步(windows与linux)
2010-08-25 20:14 32081.导出windows mysql的test库到linux m ... -
Ubuntu Server 下开启远程连接 MySQL
2010-03-16 23:24 3106要通过远程连接MySQL,需要做两步:第一步是要创建一个可以远 ... -
DB2 在REDHAT 5下的详细安装过程 DB2 9.5 C EXPRESS
2010-03-02 10:43 4590过详细测试并且补充后发表, 括号内的为自行添加的内容. ... -
IBM DB2 Express-C 9.5.2
2010-03-02 09:44 3511或许您已经知 ... -
Oracle Database 10g Express Edition安装小结
2010-03-01 15:28 9166racle Database 10g Express Edit ... -
HA JDBC – High Availability JDBC
2010-02-27 18:46 3304Some time ago I worked on a pr ... -
数据归档将走向何方
2010-02-25 11:50 2263数据量的爆炸性增长,让我们不得不更加关心存储。这也造成 ... -
Database
2010-02-18 15:53 2314下一代数据库发展的4大趋势 趋势之一:对XML的支 ... -
免安装Oracle运行pl/sql developer
2010-02-16 20:27 2183Sql客户端中,虽然最便捷的是万能而且轻量无比的Sql Wor ... -
在debian上安装oracle 10g express
2010-02-16 18:46 4921在debian上安装oracle 10g express 若 ...
相关推荐
低轨卫星行业深度研究:低轨星座蓄势待发,千亿蓝海扬帆启航 本文将对低轨卫星行业进行深入研究,探讨低轨卫星的发展前景和应用前景。 通信卫星种类 通信卫星是人造卫星的一种,作为卫星通信系统的空间部分,是...
万联证券在其发布的电气设备行业投资策略报告中指出,中国氢能市场是一个正在蓄势待发的万亿蓝海市场。氢能源作为化石燃料的理想替代品,不仅能够应对我国的减排任务,还符合“双碳”承诺,即在2030年前达到碳达峰,...
20210602-招商证券-宏川智慧-002930-扩张模式渐显成熟,石化仓储龙头蓄势待发.pdf
[优化创新,引领潮流蓄势待发]蓄势待发.pdf
燃料电池行业报告:燃动未来,燃料电池汽车蓄势待发(16页),资源名称:燃料电池行业报告:燃动未来,燃料电池汽车蓄势待发(16页)燃动未来,燃料电池汽车蓄势待发.zip...
根据给定文件信息,以下是关于泸州老窖(000568.SZ)以及其国窖产品线和次高端特曲系列的详细知识点: 泸州老窖是一家以酒类生产销售为主的上市公司,拥有悠久的历史和深厚的品牌文化底蕴。在酒类产品中,其代表性...
荣泰健康603579细分赛道龙头深度之四:引领行业,蓄势待发
20210406-国元证券-癌症早筛行业跟踪报告:早筛春天将至,商业化蓄势待发.pdf
计算机:蓄势待发,持续关注数字人民币发展机遇(2021)(68页).pdf
通信行业2021年度投资策略:百转千回,蓄势待发-20201119-招商证券.pdf
证券行业2022年度策略报告:行业持续稳健增长,新动能蓄势待发
在分析的这份文档中,我们聚焦于机床刀具...国内厂商通过技术积累和市场策略的调整,正在蓄势待发,准备在这个广阔的市场中占据一席之地。投资者和市场分析人员需要密切关注该行业的发展动态,以便更好地把握投资机会。
普华永道-中国房车:蓄势待发的小众市场-2019.1-16页.pdf
抽水蓄能行业投资梳理:政策打开成长空间,市场蓄势待发
零售行业仓储会员店系列报告之三:仓储会员业态再迎风口,盒马X会员店蓄势待发(34页).pdf
- **公司层面**:洛阳钼业在新能源产业链上游的战略布局显著加强,不仅拥有丰富的资源储备,还与下游需求方建立了紧密的合作关系,如与宁德时代的合作。此外,公司还在积极改善运营效率,通过降本增效措施来提升业绩...
20210902-民生证券-机床行业深度报告(二):高端机床国产化蓄势待发,民营企业崛起顺势而为.pdf
系列报告:碳监测篇-碳监测蓄势待发,市场空间广阔(2021) 本报告详细介绍了碳监测的重要性、市场前景和投资建议。碳监测是碳排放权交易的重要支撑,监测、报告、核查机制是碳市场建设的基础。中国环境监测总站于...
创新器械专题——手术机器人:从一马当先到万马奔腾,500亿高壁垒赛道看国产龙头蓄势待发.pdf
各就其位,蓄势待发—制胜中国养老金融市场-麦肯锡-201905.pdf