有选择地分发数据有哪些可能性?
我用一个例子来解释我的问题。 考虑一个包含所有数据的中央数据库。该数据库位于特定的地理位置。
应用程序A需要中央数据库中存在的信息的子集。此外,应用程序A可能位于与中央数据库所在地不同(也可能远)的地理位置。
因此,我考虑在应用程序A的同一位置创建一个新数据库,该数据库将包含中央数据库的一部分信息。
哪种技术/产品允许我部署这样的配置?
由于
答案 0 :(得分:4)
寻找database replication。 SQL Server可以肯定这样做,其他人(Oracle,MySQL,...)也应该拥有它。
这个想法是另一个位置维护(子集)副本。更新以递增方式交换。处理冲突的方法取决于您的申请。
答案 1 :(得分:2)
大多数主要的数据库软件,如MySql和SQL服务器都可以完成这项工作,但它 不是一个好模特。随着应用程序(流量和用户)的增长, 您不仅会在中央数据库服务器上创建一个负载(可能正在服务 其他应用程序),但您也将滥用网络带宽来传输数据 远程数据库和应用程序服务器之间。
更好的模型是让您的数据靠近应用程序服务器,并使用远处 数据库仅用于备份和恢复目的。您可以使用FC \ IP SAN(或任何其他 存储网络架构)作为您的存储网络模型,基于您的应用程序的需求。
答案 2 :(得分:1)
您未解决的一个重要问题是,应用程序A是否需要对数据进行只读访问,或者是否需要进行读写。
在阅读您的要求时想到的直接概念是sharding。在MySQL中,这可以通过partitioning完成。话虽这么说,在你跳进分区之前,一定要阅读他们的pros and cons。如果您的索引选择不当,或者您的分区方案没有经过深思熟虑,有些情况下分区可能会降低速度。
如果您的需求是只读的,那么这应该是一个相当简单的解决方案。您可以在主从上下文中使用MySQL,并使用App A关闭从属。如果你需要读写,那么这就变得复杂得多。
根据您的写入需求,您可以将读取拆分为从属,以及对主服务器的写入,但这会大大增加代码结构的复杂性(需要处理多个dbs的多个连接)。这种布局的优点是您不需要具有复杂的数据库基础结构。
另一方面,您可以保持代码不变,并在MySQL中使用Master-Master复制。虽然甲骨文没有正式支持,但很多人都在这方面取得了成功。一个快速的谷歌搜索将找到一个巨大的博客,howtos等列表。请记住,您的代码必须正确编写以支持这一点(例如:您不能使用PK的自动增量字段等)。
如果您有现金支出,那么您可以查看一些更商业化的产品。 Oracle DB和SQL Server都支持这一点。
您还可以使用基于块的数据复制(例如DRDB (and Mysql DRDB)来处理节点之间的复制,但是如果两个节点之间的链接出现故障,您将遇到的问题会发生什么
您将遇到的最大问题是如何处理2个独立数据库节点中的冲突更新。如果您的数据在地理位置上依赖,那么这对您来说可能不是问题。
长话短说,这不是一个容易(或便宜)解决的问题。
答案 3 :(得分:0)
在谈论复制数据库的任何时候,在设计阶段解决冲突的可能性非常重要。
继续之后,SAP的Sybase Replication Server将允许您使用Sybase数据库或第三方数据库执行此操作。
在Sybase的世界中,这通常被称为企业汇总环境。可能存在多个地理上分离的数据库,每个数据库具有他们主要控制的数据子集。在总部,有一个服务器包含一个存储库中的所有各种子集。您可以选择复制整个表,也可以根据各行/列中的值进行复制。
这使数据库保持松散一致的状态。交易率,地理位置分离以及网络固有的延迟将影响更新从一个数据库移动到另一个数据库的速度。如果网络连接暂时关闭,Sybase Replication Server将对事务进行排队,并在链接恢复后立即发送,但复制系统的可靠性和稳定性将受到网络连接稳定性的影响。
同样,正如其他人所说,它并不便宜,但实施和维护相对简单。
免责声明:我曾在Sybase工作过,而且仍然是SAP系列公司的一部分。