mysql - 将多个本地数据库远程同步到一个
问题描述
我需要在运行 laravel 的 Raspberry Pi 4 上创建一个带有本地网络服务器的系统,用于 API 调用、websocket 等。每个 RPI 将安装在多个客户位置。
对于这个项目,我希望能够将数据库保存/同步到远程服务器(当本地系统连接到互联网时)。
多个语言环境数据库 => 基于一个远程数据库客户
问题是,如何同步数据库并正确识别每个客户的数据并将它们呈现在一个共同的远程仪表板中。
我的第一个想法是在每个表上设置一个 customer_id 或一个 team_id,但它看起来很脏。
另一种方法是在远程服务器上创建多个数据库用于同步和一个额外的数据库来设置客户ID和数据库连接信息......
有人已经尝试过类似的东西吗?有没有确定和干净的方法来做到这一点?
解决方案
您指的是locale,但我假设您的意思是local。
根据您所说,您在中心站点有两个选择。中央数据库可以将来自远程数据库的信息存储到一个带有附加列的表中,该列指示它来自哪个远程站点,或者您可以为每个远程站点设置一个单独的表(或数据库)。
你想如何使用这些数据?
如果您一次只想处理来自一个远程站点的数据,这并不重要 - 在这两种情况下,您都需要确定要处理的数据并构建 SQL 语句以按适当的列进行过滤,或者您需要将其定向到相应的表。
如果您想同时处理来自多个远程站点的数据,那么使用不同的表需要您使用 UNION 查询来提取数据,这不太可能很好地扩展。在这种情况下,您最好使用一列来用它引用的远程站点标记每条记录。
我建议您考虑使用 Uuids 作为主键 - 在您的场景中,键冲突可能不会成为问题,但如果它成为一个试图追溯更改设计的问题,可能需要相当多的工作。
您还询问了如何同步数据库。这将取决于站点之间的连接类型以及软件的功能,但通常您会让本地系统定期与中央站点的 Web 服务通信。假设您正在收集传感器数据或类似的对话,则如下所示:
客户端 - 你好服务器,我最后的传感器读数是时间戳 xxxx 服务器 - 你好客户端,[ 向我发送来自 yyyy 的传感器读数 | 我不需要任何数据]
如果您愿意,您可以包括签名检查(例如,某个时间段内记录的 MD5 总和)之类的内容,但这可能有点矫枉过正。
推荐阅读
- grails - 如何强制 Grails GORM 从数据库中检索信息(.refresh() 不起作用)
- css - 如何在 JFoenix 时间选择器中编辑小时和分钟单元格
- java - java - 为什么Java中递增和递减的运算符优先级和关联性无法正常工作?
- mysql - AWS Lambda 和 RDS 工作示例(需要它与 Sequelize 一起使用)
- javascript - 使用 Regex JS 删除字符串中的重复单词
- android - 使用 Mockito 测试最小的实时数据视图模型
- java - Java将差异数组转换为变量
- python - Virtutalenv 命令“python setup.py egg_info”失败,错误代码为 1
- javascript - 尽管 API 已激活,但在尝试使用嵌入地图 API 时出现 ApiNotActivatedMapError
- java - Spring Boot 仅在 IDE 中工作