两个使用相同Firebird数据库的应用程序

时间:2018-10-16 13:29:56

标签: .net firebird

在我公司中,我们处于强大的软件维护之下,我们正在重写一些旧的应用程序。现在,由于某种不相关的原因(部分是由于该维护),我们需要两个不同的应用程序来使用相同的firebird数据库:

一个会写,另一个会读。

如果相关,两个应用都将位于同一台计算机(服务器)上

有可能吗?我知道这是一个糟糕的体系结构,但是我们正在对其进行更改,有一段时间我非常需要此功能。现在我开始工作了,但是写入数据库(重复记录)存在一些问题

更新1。

感谢大家的回答。现在,经过一些测试,我得出了结论,那根本不是两个应用程序的问题。我整夜都在使用写作应用程序(阅读应用程序已关闭),但仍有一些重复的记录: database_error

现在,在程序的先前版本(以及数据库的先前版本)中,该问题不存在。我自己通过在DateTime列中添加索引来更新数据库:

CREATE DESC INDEX IndexName ON TableName(DateTimeColumnName)

我添加了一个创建类似索引的过程。导致这些错误条目的索引可能是问题吗?还是不需要做任何事情,我必须在编写应用程序的某处寻找错误?

1 个答案:

答案 0 :(得分:2)

假设您正在使用Firebird服务器(而不是Firebird Embedded 1 ),则与多个应用程序共享数据库没有问题。但是,您的数据库需要正确设计,并且您的应用程序必须正确管理其事务等。

为多个应用程序使用单个数据库本身并不是一个糟糕的体系结构 2 ,但是您必须有意识地设计数据库和应用程序以实现共享使用。

您的评论是“写入数据库存在某些问题(重复的记录)” ,听起来像是数据库的设计(例如约束)和/或您的应用程序使用数据库(例如事务隔离级别,生成标识符的方法等)不足。

例如,如果您的应用程序使用诸如select max(id) + 1 from sometable之类的标识符来生成标识符,那肯定是错误的方式(如果单个应用程序可以同时生成记录,则对单个应用程序的访问甚至是错误的)。您应该使用序列(最好是触发器)来生成ID。


  1. 如果您使用的是Firebird Embedded,则是否起作用取决于OS和Firebird的版本和配置。 Windows上较旧的Firebird Embedded版本要求对数据库文件具有独占访问权。
  2. 作为一个反例,对于微服务,通常认为与多个服务共享一个数据库是一个糟糕的体系结构选择,因为这会增加相互依赖性,从而降低灵活性。
相关问题