2013-03-29 70 views
1

我发现an architecture和一对更持久的混合体系结构。混合SQL和MongoDB解决方案

我不知道是否有人有一个链接到执行层面,详细的文章,教程,展示如何结婚的MongoDB(或卡桑德拉,CouchDB的)和MySQL(任何RDBMS)一起(针对PHP,Java应用程序)

+0

结婚?将ID存储在一个代表其他密钥/ ID的系统中。除此之外,您选择的需求,平台,框架和语言都是非常自定义的。 – WiredPrairie

+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中已部署在SQL Server中的CLR函数/存储过程C#项目。

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

说服DBA将您的代码(包括潜在的JSON序列化程序)部署到生产SQL Server框中可能很困难,但好处是非常明显的。它也比XML方法表现得更好。

+0

真棒帖子,你有任何更多的信息,你可以分享基于trigers的方法吗?在我看来,在一定程度上概括这一点并不难,并且在与mongo中的oplog尾部结合时制作1:1镜像。任何陷阱? – meawoppl

0

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