【问题标题】:Storing boolean values: bundle or individually?存储布尔值:捆绑还是单独?
【发布时间】:2010-10-23 00:20:01
【问题描述】:

我有大约 50 个离散布尔值需要存储在数据库中。这些每隔几秒钟就会记录一次,所以我会随着时间的推移存储很多。

这些数据的使用方式是: 1)访问大量时间以查看标志状态历史记录 2) 查找标志更改状态的时间

一旦存储,记录将不会更新。

您是否建议将每个值存储在其自己的列中,或者将它们捆绑在一个整数值中并存储在几列中?

我很好奇随着数据变大,哪种方法更适合存储/访问数据?最终我将 24/7 全天候从多个单元获取数据,所以会有很多数据,所以我想我的问题是:压缩整数和单个列之间是否存在性能/稳定性权衡。

我正在使用带有 VB.NET 和 PHP 接口的 MySQL,但问题更多的是通用数据库设计而不是特定于 mysql 的设计。

谢谢,

【问题讨论】:

  • 这些列是否需要可查询?即:SELECT * FROM tblflags WHERE flag5=1?
  • 听起来最好将它们保留为自己的列,特别是如果您打算查询它们。那时真正的问题是您打算如何索引这些列?索引 50 多列数据会影响 INSERT / UPDATE 性能。
  • 索引它们有意义吗?我永远不会进行 UPDATE,INSERT 操作肯定会相隔 1-3 分钟。

标签: mysql database-design


【解决方案1】:

随着应用程序的发展,这类事实很少保持布尔值。

今天他们是真/假。

明天他们是真/假/不知道/不知道

第二天它们变成一个整数。

最终,它们成为基于其他数据的适当“条件”。

不要将它们“打包”为整数 32。那是目光短浅。将它们保留为独立的列——也许是“字节”或一些小东西。

【讨论】:

  • 在这种情况下,它们可能会保留为单个位,因为它们是来自 PLC 的 Modbus 线圈的状态。
  • “它们可能会保持为单个比特......”著名的遗言。 “来自 PLC 的 Modbus 线圈的状态”今天。明天,PLC 会发生变化,或者您的要求会发生变化,或者您的处理会发生变化。
  • 非常正确,您将如何处理压缩字节中的FileNotFound
【解决方案2】:

即使您知道它们将始终是布尔值,最好将它们放在单独的列中。这将使查询在未来变得更加容易和快捷。如果您必须对查询进行一些解包,您会后悔的。我也附和 S.Lott 所说的话。为未来做准备(例如,如果由于某种原因无法获得状态怎么办?你会说假还是未知?)

【讨论】:

    猜你喜欢
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    相关资源
    最近更新 更多