一尘不染

在MySQL上使用NoSQL数据库

java

我有一个在Java堆栈(Struts 2 + Spring +
Hibernate)上运行的Web应用程序,并在MySQL中保持不变。我查看了NoSQL数据库,它们肯定比RDBMS更容易推理和使用。这是一个音乐流应用程序,用于存储艺术家信息并允许用户保存播放列表。

我想知道切换到NoSQL
DB(CouchDB,MongoDB,Cassandra)是否有任何优势(性能,硬件成本,简化代码,可伸缩性)。切换到NoSQL数据库会带来什么损失/收益?

请指教。


阅读 280

收藏
2020-12-03

共1个答案

一尘不染

对“ NoSQL”的客气解释已经成为Not Only SQL。如果您确实具有真正的关系数据,或者您的功能取决于联接和ACIDity之类的数据,则应以关系方式存储该数据。在本文中,我将解释如何与 两个
NoSQL数据存储区一起使用MySQL 。现代的Web规模的数据存储都是关于了解如何为工作选择最佳工具的。

就是说,NoSQL确实是对以下事实的一种反应:关系方法和思维方式已应用于实际上并不十分适合的问题(通常是具有数千万行或更多行的大型表)。一旦表拿到大,典型的SQL“最佳实践”一直是手工
分片 数据-
即在表B中把记录1至10,000,000表A,10000001通过20000001,等等。然后,通常在应用程序模型层中,根据此方案执行查找。这就是所谓的application- aware缩放。这是耗时且容易出错的方法,但是在为长表存储维护MySQL的同时扩大规模时,它已成为或多或少的标准MO。对我来说,NoSQL代表了application- unaware替代方案。


核心价值

当我的MySQL原型开始变得太大而无法满足自己的需要时,我个人将尽可能多的数据转移到了快如闪电的Membase上,该性能优于Memcached并增加了持久性。Membase是一个分布式键值存储,可通过向集群中添加更多商品服务器来线性地扩展(或多或少进行线性扩展(例如,Zynga使用它来每秒处理50万次操作)),因此
非常
适合云时代的亚马逊EC2Joyent的

众所周知,分布式键值存储是获得巨大的线性规模的最佳方法。键值的弱点是可查询性和索引编制。但是,即使在关系世界中,可伸缩性的最佳实践是将尽可能多的精力转移到应用程序服务器上,在商品应用程序服务器上的内存中进行联接,而不是要求中央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或至少完全离开RDBMS的缺点的部分。

首先,有SQL本身。 SQL是众所周知的,并且长期以来一直是行业标准。诸如Google的App
Engine
数据存储区(在Big Table上构建)之类的某些“
NoSQL”数据库实现了它们自己的类似SQL的语言(Google的名字叫GQL,简称GQL Google Query Language)。MongoDB通过其令人愉悦的JSON查询对象对查询问题采取了一种全新的方法。尽管如此,SQL本身还是从数据中获取信息的强大工具,而数据通常是数据库的出发点。

保留RDBMS的最重要原因是ACIDAtomicity, Consistency, Isolation, Durability。我不会重新哈希Acid-
NoSQL的状态,因为在SO上的这篇文章中已经很好地解决了它的问题。可以这么说,Oracle的RDBMS拥有如此庞大的市场,这是无可厚非的,这是有道理
某些数据需要纯ACID合规性
。如果您的数据可以(如果可以,那么您可能很清楚这一事实),那么数据库也可以。保持低pH值

2020-12-03