postgresql - 物联网网络中的数据库交互
问题描述
假设我们在一个 IOT 网络中有几个 (100) 个节点。每个节点的资源都是有限的。在这些节点之一中运行着一个 postgresql 数据库服务器。现在每个节点都有几个(4-5)个进程需要与这个服务器交互来执行一些插入和选择查询。每个查询响应都必须尽可能快,以使流程正常工作。现在我想到了一些方法来做到这一点:
- 节点中的每个进程创建一个数据库客户端并执行查询。
- 一个节点中的所有进程都将它们的查询发送到本地主机本身的一个目的地,从那里通过最佳数量的数据库客户端执行查询。通过这种方式,我们可以对数据库客户端的数量进行某种控制,例如优化通过优先级队列实现执行的查询,或者通过每个线程/进程中的单独数据库客户端在单独的线程/进程中执行查询。在这种情况下,我们可以控制客户端数量、线程/进程数量、必须执行查询的优先级的优化。
- 每个节点通过某种网络协议将所有查询直接发送到数据库服务器,然后数据库服务器使用有限数量的数据库客户端现在在其自己的本地主机数据库中执行查询,然后通过同一通道将响应返回给每个节点。这种方式会增加延迟,但会保持最少的客户端数量。另外,我们还可以在这里实现一些优化,在不同的进程/线程中运行每个客户端等。在这种情况下,数据库交互可以更快,因为客户端的数量可以保持最少,它在 localhost 机器本身中运行,但它增加了一些开销来传输查询响应数据返回到节点的进程。
为了尽可能减少每个节点的资源使用率并尽可能快地查询响应,解决这个问题的最佳策略是什么?
解决方案
在不知道网络细节的情况下,选项 3 将正常使用。原因:
- 身份验证:通常您不希望使用数据库用户来验证 IoT 设备。
- 安全性:通过使用特定的物联网协议,您可以确保使用 TLS 和基于证书的服务器身份验证。
- 协议兼容性:在升级情况下,您必须确保可以独立于服务器节点升级客户端节点,反之亦然。数据库协议可能不是这种情况。
推荐阅读
- c - 如何在头文件中声明一个全局变量以及他需要在c文件中如何
- android - 如何在 Android 中将 Framelayout 中的视频显示为纵向模式?
- email - 为什么我的邮件在发送时会丢失部分内容?
- java - 最终字段与。易挥发的
- scala - 加载 Spark 上下文会导致线程“主”java.lang.NoSuchMethodError:org.apache.spark.internal.config.TypedConfigBuilder.checkValu 出现异常
- java - 计算 Apache.HttpClient 收到了多少数据?
- angular - 如何限制 mat-table 中的行并创建过滤器以过滤不在表中但在数据源中的数据?
- c - 如何在 Gtk 中使用 makefile
- c# - 在 List 类型的主实体的子属性中搜索值
在另一个列表中 并返回主要实体 - javascript - 使用 addData 时 NetChart 不会自动重新排列节点