提问者:小点点

将多个区域设置数据库远程同步到一个


我需要在Raspberry PI4上创建一个本地Web服务器的系统,运行用于API调用、websockets等的laravel。每个RPI将安装在多个客户的地方。

对于这个项目,我希望有能力将数据库保存/同步到远程服务器(当本地系统连接到internet时)。

多个区域设置数据库=>一个基于cutomers的远程数据库

问题是,如何同步数据库,正确地识别每个客户的数据,并将它们呈现在一个相互关联的远程仪表板中。

我的第一个想法是在每个表上设置一个customer_id或一个team_id,但这似乎很脏。

另一种方法是在远程服务器上创建多个数据库用于同步,并创建一个额外的数据库用于设置客户ID和数据库连接信息...

已经有人做过类似的实验了?有没有一个确定和干净的方法来做这件事?


共1个答案

匿名用户

你指的是本地,但我想你指的是本地。

根据您所说的,您在中心站点有两个选择。中央数据库可以将来自远程数据库的信息存储到一个表中,并添加一列来指示信息来自哪个远程站点,也可以为每个远程站点设置一个单独的表(或数据库)。

您希望如何使用这些数据?

如果您一次只想处理来自一个远程站点的数据,这并不重要--在这两种情况下,您都需要确定要处理的数据,并构建SQL语句,以便根据适当的列进行筛选,或者将其定向到适当的表。

如果您想同时处理来自多个远程站点的数据,那么使用不同的表需要使用联合查询提取数据,而这不太可能很好地扩展。在这种情况下,您最好使用一个列,用它引用的远程站点标记每个记录。

我建议您考虑使用UUID作为主键--在您的场景中,键冲突可能不是一个问题,但如果发生了冲突,那么尝试追溯性地修改设计可能会有相当大的工作量。

您还询问了如何同步数据库。这将取决于站点和软件功能之间的连接类型,但通常情况下,您会让本地系统定期与中心站点的webservice进行对话。假设您正在收集传感器数据或类似的数据,则对话如下所示:

客户端-你好服务器,我的上一个传感器读数的时间戳是xxxx服务器-你好客户端,[从yyyy发送传感器读数我不需要任何数据]

如果您愿意,您可以包括签名检查(例如,一个时间段内记录的MD5和),但这可能是矫枉过正的。