我正在开发一个记录多个探测器值的应用程序,我想知道如何将这些值存储在我们的 DBMS 中。
传统的方法是创建一个像这样的表:
CREATE TABLE `probe_temperature` (
`INSTANT` timestamp,
`TEMPERATURE` float,
`PROBE_ID` bigint,
CONSTRAINT `FK_probe_temperature_PROBE_ID` FOREIGN KEY (`PROBE_ID`) REFERENCES `probe` (`ID`)
)
这样,表很快就会有数百亿条记录,用于大约一百个探针。
99.9% 我们的查询将针对链接到单个探针的数据集。
考虑到这一点,我想知道通过探针创建表的相关性。类似的东西:
CREATE TABLE `probe_temperature_xxxx` /* where xxxx is the id of the probe */(
`INSTANT` timestamp,
`TEMPERATURE` float
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
我认为这有几个优点:
但这增加了代码和维护的复杂度
我还阅读了有关表分区的文章,这些文章对性能有相同的好处,但对存储空间没有好处(这是真的吗?)
性能问题是真正的风险吗?
如果是,使用动态表是个好主意吗?
“节省几千兆字节”并不是设计决策的充分理由,因为它的存储量微不足道。
只需创建一个表并在探针上对其进行索引/分区 - 取决于您的 DBMS 支持的内容。
这不是任何现代 DBMS 都应该遇到的数据量 - 所以我不会太担心性能调整(除非/直到你的现实世界查询的执行速度没有你想象的那么快)期待)