混合SQL和MongoDB解决方案

时间:2013-03-29 02:38:08

标签: mysql mongodb hybrid nosql

我找到了an architecture和更多持久性混合架构。

我想知道是否有人链接到实现级别,详细文章,教程如何将MongoDB(或Cassandra,CouchDB)和MySQL(任何RDBMS)结合在一起(对于PHP,Java应用程序)

2 个答案:

答案 0 :(得分:3)

我可以在目前的工作中分享一些关于我是如何做到的细节。

请记住,关系存储被视为遗留系统。他们拥有权威实体,我们正在将这些数据移到MongoDB进行读取。展望未来,我们希望写入也可以转到MongoDB,而不是关系系统。

将数据从MySQL移动到MongoDB(特别是Wordpress)

TL; DR - 使用触发器和存储过程

对于这种方法,我们在MySQL中设置触发器,用于监视插入,更新和删除。当其中一个操作发生时,我们将触发一个生成实体的存储过程,并将其放入一个充当队列的表中。

然后我们每隔几秒就使用一个外部进程来轮询该表。我们编写了一个存储过程,以确保我们不会多次处理相同的排队项目。

外部进程(Mule ESB流)会对从队列表中读取数据的存储过程的结果进行一点转换 - 然后将其传递给MongoDB。

从Wordpress后端发布后,在MongoDB中将Wordpress帖子看作JSON文档可能需要2秒钟。

将数据从SQL Server移动到MongoDB(方法1)

我使用的第一种方法是编写生成XML的存储过程。在TSQL中,XML语法有点尴尬,但它完成了工作。好处是你可以任意深入地构建XML结构。

生成XML之后,它就是跳跃式跳转和编写将XML转换为JSON的工具的跳转。然后你可以有一个外部进程(我们再次使用Mule)获取XML结果,将它们转换为JSON,然后写入MongoDB。

将数据从SQL Server移动到MongoDB(方法2)

此方法涉及在Visual Studio中编写C#项目,该项目在SQL Server中部署为CLR函数/存储过程。

这是我最喜欢的方法,因为代码很容易编写,并且在服务器上运行速度非常快。您甚至可以在CLR函数中序列化结果,然后将它们存储在临时表中 - 或者只是从存储过程中返回它们。

说服DBA将代码(包括可能的JSON序列化程序)部署到生产SQL Server框上可能很难,但好处非常明显。它的性能也比XML方法好得多。

答案 1 :(得分:0)

将围绕对象(实体)构建PHP或Java应用程序。根据实体的角色和使用模型(持久化和检索它们的频率),您可能需要为其选择适当的数据存储。 例如,您可以在面向文档的数据库(如mongodb)中保留RBDMS中的用户ID密码,演员对象(文档,音乐,博客文章等),并且可以在redis中保留常用的小对象,如文件系统层次结构。 这一切都取决于你的架构 - 没有现成的框架。