视觉中国MongoDB应用实践:从MySQL转型与选型

5星 · 超过95%的资源 需积分: 15 9 下载量 156 浏览量 更新于2024-07-26 收藏 2.91MB PDF 举报
在"视觉中国的MongoDB应用实践"一文中,作者在2011年的QCon Beijing会议上分享了他们公司转向MongoDB的原因和过程。起初,视觉中国采用MySQL作为数据库,遇到的问题包括多数据源需求、灵活的Schema、频繁的属性更新以及硬件资源的限制。原有的架构采用Master-Master-Slave(MMM)模式,但无法满足新的业务需求。 作者提到,他们最初考虑过NoSQL数据库是因为NoSQL数据库如MongoDB的自动分片和分布式存储特性,但这并不是他们选择MongoDB的主要原因。真正驱使他们转向的是MongoDB的键值对(KV)存储、适应性强、schema自由度较高以及对内存资源的有效管理,这些特性恰好解决了MySQL在灵活性和性能上的不足。 MongoDB的选择过程中,他们倾向于选择一个能够持久化、分布式存储,并且具有PHP/Perl客户端支持、接近Memcached性能、支持分布式集群且文档清晰的解决方案。备选方案包括Flare、Repcached、Redis和TC/TT。经过评估,MongoDB最终成为视觉中国选择的替代品,因为它满足了他们的大部分需求,尤其是在适应不确定性和处理高并发场景方面。 在这个实践中,MongoDB的应用不仅解决了原始架构中的问题,而且引入了一种新的架构设计,将MySQL与MongoDB结合使用,通过KV存储方式来应对动态变化的数据结构。此外,MongoDB的缓存持久性以及内存管理能力使得视觉中国能够在保持高性能的同时,有效管理硬件资源。 总结来说,这篇论文详细讲述了视觉中国在面临业务需求变化时,如何从传统关系型数据库切换到非关系型数据库MongoDB的过程,包括挑战、解决方案选择以及MongoDB在实际应用中的优势。这是一篇关于数据库技术转型的实际案例研究,对于理解大型企业如何处理复杂数据需求和架构优化具有参考价值。

项目突然跑不起来报这个错 Exception in monitor thread while connecting to server 10.18.21.79:27117 com.mongodb.MongoSocketReadException: Exception receiving message at com.mongodb.connection.InternalStreamConnection.translateReadException(InternalStreamConnection.java:536) at com.mongodb.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.java:421) at com.mongodb.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:290) at com.mongodb.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:255) at com.mongodb.connection.CommandHelper.sendAndReceive(CommandHelper.java:84) at com.mongodb.connection.CommandHelper.executeCommand(CommandHelper.java:34) at com.mongodb.connection.InternalStreamConnectionInitializer.initializeConnectionDescription(InternalStreamConnectionInitializer.java:91) at com.mongodb.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:51) at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:127) at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:114) at java.lang.Thread.run(Thread.java:748) Caused by: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:210) at java.net.SocketInputStream.read(SocketInputStream.java:141) at com.mongodb.connection.SocketStream.read(SocketStream.java:84) at com.mongodb.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:547) at com.mongodb.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.java:418)

2023-06-09 上传