2011-03-13 118 views
-1

我有一个已经移植到现代系统并使用berkeley数据库的遗留系统。它是与开放的cobol编译的。
在以前的系统中,为了从简单的Web前端使用序列化的固定数据CISAM文件,每天一次将其转换为Microsoft数据库(单向) 我想创建一个新的Web前端我想要数据实时更新...
问题是,伯克利数据库是关键值数据库,并不支持SQL。
所以这里的问题是 我应该创建一个使用Berkeley数据库向Web前端提供数据的Web服务吗? OR 我应该与关系数据库(MySQL和PostgreSQL)使用Mysql同步Berkeley DB

在第一种情况下同步伯克利数据库有不会是一个同步issue.But问题是灵活性是非常有限...例如由collumn排序它不是索引需要自定义排序功能...总结一些领域需要读取所有记录数据,然后手动总结..

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

但我倾向于更第二种方法..使用以下算法 检查每5分钟的文件modifation日期... 已修改打开文件...然后让所有的钥匙,并比较缓存键数组。 然后遍历每条记录并检查数据散列是否与缓存散列相同。
然后删除/插入..

还有其他想法吗?

+0

你在用什么语言工作?什么工具? – 2011-03-14 16:33:32

+0

open cobol和java .. – GorillaApe 2011-03-14 18:23:05

+0

首先,我听说过任何结合cobol,java和bsddb的人。 Berkely Db最常用于本机C,以及Python等高级语言。 – 2011-04-25 00:47:06

回答

1

为什么不把源代码给伯克利-DB数据库驱动系统,并找到一种方法来写一个SOAP查询和处理它使用该应用程序。现在你有一个可以直接读取BSDDB的Web服务,而且你不需要同步。即使您没有原始应用程序的源代码,如果您可以自己解决BSDDB键/值存储区的内容,您可以很容易地(例如在Python中)编写一个简单的Web服务应用程序,它使用SOAP提供BSDDB数据库的内容。我会先写几行Python来打开BSDDB值,然后转储Key值和它们相关的负载。 (如果你喜欢,“价值”值)。

+0

我很抱歉,但我不明白你想说什么。源代码?? – GorillaApe 2011-03-13 21:14:31

+0

您没有自己存在的BSSDB文件。你显然有一个用某种编程语言(可能是C++或C,或Python,或Perl)编写的应用程序来访问这个数据库。这是一个编程解答网站。你知道什么是源代码,对吗? – 2011-03-14 16:29:37

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

+1

我已经看到了对SQL的支持,但他们并没有说我如何将我当前的文件迁移到该服务器。每个记录的数据部分不匹配SQL的服务器数据类型,它们是cobol特定的。 Cobol程序大约有700个,为所有它们编写代码以使它们与Berkeley和SQL兼容是不可能的。我已经问过,但是还没有答案 – GorillaApe 2011-03-13 21:10:43

1

您的选择是拥有两个存储库并对其进行同步或使您的Web应用程序直接显示数据并将数据存储到Berkeley DB键值数据存储中。

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

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

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