Kyl*_*ild 37
对"NoSQL"的礼貌解释已成为现实Not Only SQL.如果您的数据确实是真正的关系,或者您的功能取决于连接和ACIDity之类的东西,那么您应该以关系方式存储该数据.在这篇文章中,我将解释如何将MySQL与两个 NoSQL数据存储一起使用.现代的网络规模数据存储就是要了解如何为工作选择最佳工具.
也就是说,NoSQL实际上是对这样一个事实的反应:关系方法和思维方式已经应用于实际上并不适合的问题(通常是具有数千万行或更多行的大表).一旦表拿到大,典型的SQL"最佳实践"一直是手工分片数据-即在表B中把记录1至10,000,000表A,10000001通过20000001,等等.然后,通常在应用程序模型层中,根据该方案执行查找.这就是所谓的application-aware缩放.这是时间密集且容易出错的,但是为了在长桌面商店中维护MySQL的同时扩展某些东西,它已成为一个或多或少的标准MO.对我来说NoSQL代表了application-unaware另一种选择.
核心价值
当我有一个MySQL原型开始变得太大而不是为了自己的好处时,我亲自将尽可能多的数据移动到闪电般快速的Membase,它的性能优于Memcached并增加了持久性.Membase是一个分布式键值存储,可以或多或少线性扩展(例如,Zynga使用它来处理每秒50万个操作数),通过在群集中添加更多商品服务器 - 因此它非常适合云时代的亚马逊EC2,Joyent的等
众所周知,分布式键值存储是获得巨大线性规模的最佳方式.键值的弱点是可查询性和索引.但即使在关系世界中,可伸缩性的最佳实践是尽可能多地将更多精力卸载到应用程序服务器上,在商用应用程序服务器上进行内存连接,而不是要求中央RDB集群处理所有逻辑.由于simple selectplus application logic实际上是即使在 MySQL 上实现大规模扩展的最佳方式,因此向Membase(或像Riak这样的竞争对手)这样的过渡并不是太糟糕.
文件商店
有时 - 虽然我认为不像许多人想的那么频繁 - 应用程序的设计固有地需要二级索引,范围可查询性等.NoSQL方法通过document store类似MongoDB来实现.像Membase一样,Mongo在关系数据库特别弱的一些领域非常好,比如application-unaware缩放auto-sharding,和maintaining flat response times even as dataset size balloons.它比Membase慢得多,做纯水平刻度有点棘手,但好处是它具有很高的可查询性.您可以实时查询参数和范围,也可以使用Map/Reduce在真正庞大的数据集上执行复杂的批处理操作.
在我上面提到的同一个项目中,我使用Membase来提供大量的实时播放器数据,我们使用MongoDB来存储分析/度量数据,这正是MongoDB所发挥的作用.
为什么要保留SQL中的东西
我简要地谈到了"真正的关系"信息应保留在关系数据库中的事实.正如评论员Dan K.指出的那样,我错过了讨论离开RDBMS的缺点的部分,或者至少完全抛弃它.
首先,有SQL本身. SQL是众所周知的,并且长期以来一直是行业标准.一些"NoSQL"数据库,如Google的App Engine数据存储区(基于Big Table构建)实现了他们自己的类似SQL的语言(谷歌被称为,可爱,GQL Google Query Language).MongoDB通过其令人愉快的JSON查询对象采用了一种全新的查询问题方法.尽管如此,SQL本身也是一种从数据中获取信息的强大工具,这通常是数据库的重点.
保持RDBMS的最重要原因是ACID,或Atomicity, Consistency, Isolation, Durability.我不会重新讨论Acid-NoSQL的状态,因为它在SO上的帖子中得到了很好的解决.可以这么说,有一个理性的原因,甲骨文的RDBMS拥有如此庞大的市场,无法实现任何目标: 一些数据需要纯ACID合规性.如果您的数据确实存在(如果确实如此,您可能很清楚这一事实),那么您的数据库也是如此.保持低pH值!
编辑: 查看Aaronaught的帖子. 他比我更好地代表了企业对企业的观点,部分原因是因为我把我的整个职业生涯都花在了消费领域.
| 归档时间: |
|
| 查看次数: |
4975 次 |
| 最近记录: |