将Berkeley DB与Mysql同步

时间:2011-03-13 13:42:41

标签: database berkeley-db

我有一个遗留系统,已移植到现代系统并使用berkeley数据库。它是用open cobol编译的 在以前的系统中,使用ACCESS宏将序列化的固定数据CISAM文件每天转换一次到微软数据库,以便从简单的Web前端使用。(单向) 我想创建一个新的Web前端,我希望数据实时更新...
问题是berkeley数据库是关键值数据库而且不支持sql 所以这里的问题是 我应该创建一个使用Berkeley数据库向Web前端提供数据的Web服务吗? 要么 我应该将berkeley数据库与关系数据库(Mysql,postgresql)同步

在第一种情况下,不会出现同步问题。但问题是灵活性非常有限......例如,通过匹配对其进行索引而不进行索引需要自定义排序功能...总结一些字段需要全部阅读记录数据然后手动求和..

在第二种情况下,简单的方法是只读取并转换为数据库。我无法找到一种方法来检查已更新的内容......插入或删除。

但我更倾向于第二种方法..使用以下算法 每5分钟检查一次文件修改日期...... 打开已修改的文件...然后获取所有密钥并与缓存的密钥数组进行比较。 然后遍历每个记录并检查数据哈希是否与缓存哈希相同 然后删除/插入..

还有其他想法吗?

3 个答案:

答案 0 :(得分:1)

为什么不将源代码带到berkely-db数据库驱动的系统,并找到一种编写SOAP查询并使用该应用程序处理它的方法。现在您有了一个可以直接读取此BSDDB的Web服务,而您不需要同步。

即使您没有原始应用程序的源代码,如果您可以自己弄清楚如何解压缩BSDDB键/值存储的内容,您可以轻松地(例如在Python中)编写一个简单的Web使用SOAP提供BSDDB数据库内容的服务应用程序。我将首先编写几行Python来打开BSDDB值,然后转储Key-values及其相关的有效负载。 (“值”值,如果您愿意)。

答案 1 :(得分:1)

您的选择是拥有两个存储库并同步它们,或使您的Web应用程序直接显示和存储到Berkeley DB键值数据存储中。

如果您决定使用单独的RDBMS存储库维护和同步Berkeley DB中以键值格式存储的数据,那么您需要编写一个可以为您执行同步的应用程序。键值数据存储和RDBMS数据存储之间的映射需要由同步应用程序按照您已经概述的行执行。您可以按照建议扫描/比较/对比两个存储库,也可以创建可由同步读取和应用的“应用程序数据日志”。这种方法的问题在于,您最终可能会花费大量时间和精力来尝试同步两个存储库。

另一个选择是编写Web应用程序,以便它可以直接与Berkeley DB存储库通信(如Warren所建议)。有几种脚本语言具有Berkeley DB绑定(Perl,PHP,Python,TCL和Ruby等)。如果Web应用程序直接与Berkeley DB存储库通信是一个问题,您总是可以编写一个简单的服务器应用程序,该应用程序与BDB存储库对话并且可以处理来自Web应用程序的HTTP请求(基本上,Warren建议的SOAP解决方案) 。

我认为从长远来看,您会发现拥有单个存储库更容易管理,即使这意味着短期内还会有一些额外的应用程序开发工作。

答案 2 :(得分:0)

好吧,Berkeley DB确实有一个SQL API(自2010年春季开始)。有关详细信息,请参阅http://www.oracle.com/technetwork/database/berkeleydb/overview/index.html

另外,我建议您将问题发布到Berkeley DB论坛 http://forums.oracle.com/forums/forum.jspa?forumID=271