gpt4 book ai didi

.net - 轻巧,健壮的MySql复制替代品-适用于客户端应用程序而非基础结构

转载 作者:行者123 更新时间:2023-11-29 01:46:09 25 4
gpt4 key购买 nike

我正在维护的几个软件直接连接到远程数据库,以获取需要操作的数据。在过去,这不是问题。然而,客户现在需要的功能是执行返回大量历史数据的查询。网络延迟确实开始成为一个问题。
我的第一种方法是保持查询rdbms的软件完全相同,只是将其指向localhost。然后直接在客户机(膝上型电脑/上网本/等等)上构建一个从机,因为没有网络调用,所以速度又非常快。
很明显的问题是,这不是复制的目的。很容易损坏或破坏从机,特别是在经常重启(有时出乎意料)的机器上,比如我的软件运行在笔记本和上网本上。因为我们在客户机上有0个特权,所以一个坏的从机是不可能的。我个人喜欢复制,但当事情发生变化时,总会有很多人为的干预——这不适合这里。
这里有一些预先存在的替代方案吗?我在想一个在安装时重建大型转储的系统。然后,我的C#.NET服务将填补从上次更新到当前时间的空白,只要它有网络连接。
它不会像slave那样追溯更新,也不会像slave那样做任何事情。它只会从不断增长的远程主机中添加新行。这些限制在可接受的范围内。吸引人的是,这个.NET“rdbms管理器”可能真的很小,从而最小化了可能发生错误的地方,这似乎是我放弃的所有不必要的复制功能的一个很好的交换。
我错过了什么还是有更好的选择?谢谢。

最佳答案

关于写你自己的,你肯定可以这样做,因为你的要求是如此狭窄。如果他们不太可能改变,那可能会更好。当然,你必须注意设计,这样任何中断都会导致稍后的重新尝试。
至于已经存在的用于高度可配置数据同步的东西,我一直在使用SymmetricDS。它能很好地抵御干扰,在连接速度慢的情况下也能很好地工作。因为您指定了MySQL,所以它只能使用5或更高版本,因为它是基于触发器的。但是,这是一个可以考虑的选项。
关于SymmetricDS配置:因为我真的不能简单地回答您的评论。
除了提供诸如端口、数据库驱动程序和连接信息、注册节点url、self url等服务信息的属性文件外,复制内容和发送位置的配置都在数据库中(默认表前缀sym_)。即使您可以放入properties文件的大多数内容也可以放入sym_parameter表中。
所有复制配置都在注册节点(通常也是中心/顶层节点)完成。更改就像对数据的更改一样进行传输,子节点会自动重新同步其触发器。我将简要介绍一个非常基本的配置,用于两层设置(中心和存储),一个双向表。不过,我不会进入节点、注册、初始加载或其他管理。
下面的语句非常简单。如果您只是通读它们,很明显它们是定义“中心”组(或层)节点和“存储”组节点之间关系的一部分。路由器是复制配置的一个关键部分,定义捕获的数据事件如何路由以及路由到哪里。因为默认情况下使用表的主键并发送到目标组的所有节点,所以这里的每个名称都是identity

insert into sym_node_group (node_group_id, description) values ('central', 'Central database');
insert into sym_node_group (node_group_id, description) values ('stores', 'Store database');
insert into sym_node_group_link (source_node_group_id, target_node_group_id, data_event_action)
values ('stores', 'central', 'P');
-- stores push to central
insert into sym_node_group_link (source_node_group_id, target_node_group_id, data_event_action)
values ('central', 'stores', 'W');
-- central waits-for-pull from stores
insert into sym_router (router_id, source_node_group_id, target_node_group_id, create_time, last_update_time)
values ('central-to-store-identity', 'central', 'stores', current_timestamp, current_timestamp);
insert into sym_router (router_id, source_node_group_id, target_node_group_id, create_time, last_update_time)
values ('store-to-central-identity', 'stores', 'central', current_timestamp, current_timestamp);

下面是我们要复制的表的详细信息。通道用于隔离表组。如果在一个通道中为某些内容批处理数据事件时出现问题,则不会影响其他通道。也可以暂停或忽略整个通道的批处理。触发器条目只是说,“我想从这个表中捕获数据事件”,而 sync_on_incoming_batch的值是特殊的,因为这将允许将存储区的更改复制到中心存储区,然后再复制到所有其他存储区。然后创建触发器/路由器关联,以完成捕获数据事件和将这些事件发送到其他节点之间的关系。一个用于将更改从存储区发送到中心,另一个用于其他方式。
insert into sym_channel (channel_id, processing_order, max_batch_size, enabled, description)
values ('rewardscard-channel', 1, 100000, 1, 'rewards card tables');
insert into sym_trigger (trigger_id,source_table_name,channel_id,last_update_time,create_time,sync_on_incoming_batch)
values ('customer-trigger','customer','rewardscard-channel',current_timestamp,current_timestamp,1);
insert into sym_trigger_router (trigger_id,router_id,initial_load_order,last_update_time,create_time)
values ('customer-trigger', 'store-to-central-identity', 200, current_timestamp, current_timestamp);
insert into sym_trigger_router (trigger_id,router_id,initial_load_order,last_update_time,create_time)
values ('customer-trigger', 'central-to-store-identity', 100, current_timestamp, current_timestamp);

这些表中有许多列我没有显示,它们允许您对复制进行非常精细的控制。不过,用户手册的附录A中描述了所有表和列。
安装起来也不难,只是在学习的时候需要一点手册。我创建了用于客户端的配置,但我为技术人员制作了静默安装脚本,以便在几个步骤中让客户端运行。另一个脚本开始将客户端数据库的初始加载上载到中央数据库(如果反之亦然,则在中央数据库执行)。
您可以静默地安装Java和SymmetricDS(它确实提供了一种将其作为windows服务安装的方法)。每个节点都必须有一个唯一的I d,因此您必须部分地生成属性文件,以及连接到本地数据库的信息(我认为,手动讨论需要哪些特权)。
您可以在中心数据库中打开注册,以便任何计算机都可以注册,否则,在节点尝试注册之前,中心必须在 1sym_node中具有用于启用已知 sym_node_security的注册的条目。
您可以继续将安装程序运行的数据库数据的初始脚本保存到客户机的本地数据库中。当从中心到节点执行初始加载时,它将更新现有行,或者如果未找到则插入。但是,触发器/路由器关联有一个 node_id列:您可以定义一个select语句,将发送的数据限制为只发送到安装脚本中不包含的内容。
让中心从远程客户端安装启动初始加载可能需要在中心运行的另一个服务的帮助,该服务可以向该安装发送请求,然后该服务对中心数据库进行更改以启动该初始加载。我还不知道节点如何从父节点请求初始加载。如果您不想使用开放式注册(安装程序发送 initial_load_select,服务插入两行以启用注册),这样的服务也可以很容易地促进注册。

关于.net - 轻巧,健壮的MySql复制替代品-适用于客户端应用程序而非基础结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6361550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com