Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在MySQL上使用NoSQL数据库_Java_Mysql_Mongodb_Couchdb_Nosql - Fatal编程技术网

Java 在MySQL上使用NoSQL数据库

Java 在MySQL上使用NoSQL数据库,java,mysql,mongodb,couchdb,nosql,Java,Mysql,Mongodb,Couchdb,Nosql,我有一个运行在Java堆栈(Struts 2+Spring+Hibernate)上的web应用程序,并在MySQL中持久化。我看过NoSQL数据库,它们当然比RDBMS更容易推理和使用。这是一个音乐流应用程序,它存储艺术家信息,并允许用户保存播放列表 我想知道切换到NoSQL数据库(CouchDB?、MongoDB?、Cassandra?)是否有任何优势(性能?、硬件成本?、简化代码?、可伸缩性?)。切换到NoSQL数据库会有什么损失/收获 请提供建议。对于这个问题,只有一个正确答案:只有当您遇

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

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


请提供建议。

对于这个问题,只有一个正确答案:只有当您遇到性能问题,或者您预期流量会大幅增加,并且(通过压力测试)已测量到您的体系结构不适合时,才更改当前的解决方案


否则-甚至不需要评估备选方案。

我认为这在很大程度上取决于您希望在数据库中存储什么。我没有CouchDB或Cassandra的经验,所以我会让其他人为他们说话,但我经常使用MongoDB和MySQL

如果您正在开发需要事务的应用程序,例如计费应用程序,您肯定会希望使用MySQL,因为它支持事务。MySQL是酸性的,即它是原子的、一致的、隔离的和持久的。这本质上意味着,当您在MySQL中更新一行时,它一定会发生。然而,MySQL的问题是它不能很容易地水平扩展(通过添加越来越多的服务器)。MySQL服务器倾向于通过增加更多内存、硬盘空间等来垂直扩展,但它们最终会达到一个上限,这可能会带来巨大的成本

MongoDB是一个文档数据库。它在集合中存储类似JSON的文档,并且没有模式,因此每个文档都可以不同。这对于您的应用程序的灵活性是非常好的。许多开发人员说,noSql解决方案更多地是为程序员开发的,而且它们往往更易于构建(以我的经验来看)。此外,MongoDB通过将数据库分块进行水平扩展。事实上,现在甚至可以实现自动化

但是使用MongoDB也有缺点。如果您要在生产中使用它,您确实必须为它配备一个复制从机。这是因为MongoDB没有完整的单服务器持久性。因此,如果出现电源故障,您可能需要修复整个MongoDB数据库,这可能需要几个小时。如果你资金充足,这可能不是一个大问题,但如果你是一个新组织,资金很少,这可能会很困难(使用云计算?)。此外,MongoDB不支持保证原子性和隔离所必需的事务。最后,MongoDB最终是一致的(尽管我已经看到了这个论点的一些方面)——这意味着当写入发生时,所有其他进程都不能保证立即看到信息——只有最终


在我看来,如果您正在存储艺术家信息和关于曲目的元数据,那么MongoDB将是一个很好的解决方案。如果您正在存储用户数据、账单数据等,那么将其存储在MySQL中

对“NoSQL”的礼貌解释已经不仅仅是SQL了。如果您拥有的数据确实是关系型的,或者如果您的功能依赖于连接和酸度之类的东西,那么您应该以关系型的方式存储这些数据。在这篇文章中,我将解释如何使用MySQL和两个NoSQL数据存储。现代的web级数据存储就是要了解如何为工作选择最佳工具

也就是说,NoSQL实际上是对以下事实的一种反应:关系方法和思维方式已应用于实际不太适合的问题(通常是具有数千万行或更多行的大型表)。一旦表变得如此庞大,典型的SQL“最佳实践”就是手动切分数据——也就是说,将记录1到10000000放入表A,10000001到2000001放入表B,依此类推。然后,通常在应用程序模型层,根据该方案执行查找。这就是所谓的
应用程序感知
缩放。它耗时且容易出错,但要在为长表存储维护MySQL的同时扩展某些内容,它或多或少已成为一种标准的MO。对我来说,NoSQL代表了
应用程序不知道的
替代方案


关键值

当我有一个MySQL原型开始变得太大而不利于自己时,我个人将尽可能多的数据移动到闪电般的速度,这比Memcached好,并增加了持久性。Membase是一个分布式的键值存储,通过向集群中添加更多的商品服务器,可以或多或少地线性扩展(例如,Zynga使用它来处理每秒50万次的操作),因此它非常适合云时代等

众所周知,分布式键值存储是获得巨大线性规模的最佳方式。键值的弱点是可查询性和索引性。但是,即使在关系世界中,可伸缩性的最佳实践是尽可能地将精力转移到应用服务器上,在商品应用服务器上的内存中进行连接,而不是要求中央RDB集群处理所有这些逻辑。由于
simple select
plus
application logic
确实是实现大规模应用的最佳方式,即使是在MySQL上,向Membase(或其竞争对手)这样的产品过渡也不算太糟糕


文档存储

有时——尽管我的争论比许多人想象的要少——应用程序的设计本质上需要二级索引、范围查询能力等。NoSQL实现这一点的方法是通过
文档存储
等。与Membase一样,Mongo在一些关系数据库非常特殊的领域也非常出色