Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 针对单一数据库体系结构的多应用程序_Database_Architecture - Fatal编程技术网

Database 针对单一数据库体系结构的多应用程序

Database 针对单一数据库体系结构的多应用程序,database,architecture,Database,Architecture,我们目前正在为我们的内部应用程序创建一个新策略。目前,我们有大约10-15个应用程序直接与同一个数据库相冲突。这显然不是很好,我们希望评估我们的选择。在我看来,我们必须做出以下选择: 复制数据库并使用复制等方法使其同步 在数据库和上面的10-15个应用程序之间创建一个新的应用程序 其他的 我很想听听你对此的看法。我相信第二种选择是可行的,这也为我们提供了一个实现缓存的有效层。但是,如何为所有应用程序公开此层?webservices/rest将是一条出路,还是有其他更好的方法可以做到这一点?我

我们目前正在为我们的内部应用程序创建一个新策略。目前,我们有大约10-15个应用程序直接与同一个数据库相冲突。这显然不是很好,我们希望评估我们的选择。在我看来,我们必须做出以下选择:

  • 复制数据库并使用复制等方法使其同步
  • 在数据库和上面的10-15个应用程序之间创建一个新的应用程序
  • 其他的

我很想听听你对此的看法。我相信第二种选择是可行的,这也为我们提供了一个实现缓存的有效层。但是,如何为所有应用程序公开此层?webservices/rest将是一条出路,还是有其他更好的方法可以做到这一点?

我不明白为什么10-15个应用程序必须共享一个数据库?真的所有应用程序都必须使用所有表吗

首先,将每个应用程序唯一的所有表移动到单独的数据库中


完成后,应该很容易看到多个应用程序访问同一数据库时是否会出现任何问题。通常情况下,除非应用程序开始缓存数据,否则这并不重要(因为您永远不知道其他应用程序是否更新了您缓存的某些数据)。最典型的方法是为此使用某种消息传递。

分析您公开的选项:

复制数据库并使用复制等方法使其同步

如果所有应用程序都需要访问同一个数据库,我发现复制它是一个错误的决定,因为您将面临同步问题(过时的数据等)

在数据库和上面的10-15个应用程序之间创建一个新的应用程序

这确实是一个很好的可能性。如果您不希望所有这些应用程序都依赖于数据库的实现细节(例如,对一个表的更改会影响所有这些应用程序的代码),那么可以将数据库“隐藏”在为这些“客户机应用程序”提供“有业务意义”操作的应用程序后面


如果您只是面临性能问题,我建议将数据库集群化(而不是手动复制)。

一个未提及的选项是在存储过程/触发器等中包含部分逻辑。。。这不是一个好主意,但不是一个好主意


我想说你的第二个选择是这里最好的选择。如果您使用的是.NET平台,WCF确实是一种简单而强大的解决方案。

我认为流行语的答案是“面向服务的体系结构”——这确实是选项2

这是一项大规模的事业,有许多令人兴奋的死胡同需要探索——但基本上,不要考虑数据库和表,而是考虑这15个应用程序所需要的服务。有些可能是共享的,有些可能是特定于一个应用程序的。找到一种向应用程序公开这些服务的方法——但请记住,web服务调用可能比等效的直接数据库调用慢得多,因此不要将“面向服务的体系结构”理解为必须在任何地方引入web服务——这更多的是一种思维方式,而不是产品规范

根据我的经验,复制和同步会造成非常脆弱的系统,其故障模式甚至会伤害大脑


另一方面,你实际上并没有说你要解决的具体问题是什么。如果它的性能——解决性能问题最便宜的方法就是用硬件来解决问题。如果是可管理性的话——SOA可以帮助做到这一点——但它通常也会在组合中引入额外的基础设施,这也需要维护。确保您真正清楚是什么推动了您的体系结构选择,因为没有单一的“最佳”解决方案—这都是权衡问题。

好吧,这很复杂,因为这是新旧应用程序的混合。此数据库包含所有客户数据,因此提取唯一的表将是一项艰巨的任务,而且大多数表由两个或多个应用程序共享。消息传递方法正在被绝对讨论,但我认为没有任何“简单”的方法可以在不从头开始的情况下实现这一点。是的,这是一项艰巨的工作。当您有5个或10个以上的应用程序时,您认为会是什么样子?我在2个数据库中维护了5个应用程序。有些相当复杂。熟悉了代码后,我打开了MSVisio,让它自动创建每个数据库中所有表的图表。然后,我根据功能对表进行分组,并在每个分组周围放置彩色编码块。最后,我不仅对数据库有了更好的理解,还发现了一些甚至没有使用过的表。这也使得添加新功能变得更加容易。我们在数据库中的逻辑方面已经有了很大的问题,这使得维护起来非常困难,同时也产生了许多难以理解的问题。通过在数据库顶部添加一层,我们的计划是将一些逻辑提取到代码中。是的,我强烈建议不要使用数据库中的任何逻辑,它是程序性的、繁琐的、分散的,并且很难维护。在这里,公开数据库的层实际上是您唯一真正的选择。德国劳埃德船级社