Database design 数据库(RDBMS)中应该存储什么?

Database design 数据库(RDBMS)中应该存储什么?,database-design,Database Design,是否有任何准则/最佳实践来决定数据库中应存储何种类型的数据 例如,使用数据库存储是否可以 应用程序日志 配置详细信息(如服务器IP地址等) 系统信息(例如,shell脚本的名称、批处理作业的调度信息、批处理作业状态等) 我见过使用数据库存储这些数据的应用程序。这可以接受吗?这种设计的优缺点是什么?要回答这个问题,我们必须了解数据库存储提供了哪些在平面文件存储中不可用的功能 安全性-您可以存储内容,并确保更新、删除和视图受到控制 审核-您可以跟踪谁进行了更改以及更改的时间 分布式服务器—如果有多个

是否有任何准则/最佳实践来决定数据库中应存储何种类型的数据

例如,使用数据库存储是否可以

  • 应用程序日志
  • 配置详细信息(如服务器IP地址等)
  • 系统信息(例如,shell脚本的名称、批处理作业的调度信息、批处理作业状态等)

  • 我见过使用数据库存储这些数据的应用程序。这可以接受吗?这种设计的优缺点是什么?

    要回答这个问题,我们必须了解数据库存储提供了哪些在平面文件存储中不可用的功能

  • 安全性-您可以存储内容,并确保更新、删除和视图受到控制
  • 审核-您可以跟踪谁进行了更改以及更改的时间
  • 分布式服务器—如果有多个应用程序服务器访问单个数据库,则可以避免在多个位置存储相同的数据

  • 如果这些是您的数据所需要的,那么最好将它们存储在数据库中。

    一个小问题:99%的情况下,将配置存储在数据库中是个糟糕的主意。配置太重要了,不能因为数据库连接断开而丢失:它必须是100%防弹的。

    在过去的几个项目中,我们将所有内容都存储在数据库中,当从开发转移到生产时,它确实很有帮助,因为应用程序本身几乎没有什么可配置的

    记录到数据库可能很有用(例如,Log4j),因为它允许测试人员和分析人员广泛访问日志


    我想这取决于你的情况。数据库中存储的所有内容都为系统增加了一个复杂度级别。读取文件比访问数据库更容易从代码中获得相同的信息。一个可能的规则是系统越大,数据库中存储的数据就越多。

    应用程序日志

    虽然将数据库中的数据限制在特定的时间范围内(例如转储/归档/压缩为统计所有超过3个月的数据)通常是一个好主意,但将日志记录在数据库中可以非常快速和轻松地分析数据。需要查看特定用户所做的工作吗?“从日志中选择*,其中用户='bla'”。需要找出系统在特定时间崩溃的原因吗?“从日志中选择*,其中时间戳介于故障-1小时和故障+5分钟之间”

    配置详细信息(如服务器IP地址等)

    这取决于配置细节。有些是,有些不是。对于在多个客户端(例如网站)上运行的应用程序来说,所有有效且可能经常更改的内容(例如用户设置)都应该放在数据库中。对于或多或少的静态选项,我更喜欢使用配置文件

    系统信息(例如,shell脚本的名称、批处理作业的计划信息、批处理作业状态等)


    我想这和配置细节差不多。如果更改:数据库。如果是静态的:config文件。Shell脚本通常是静态的。计划信息和状态将随着时间的推移而变化。

    RE:Config data 将配置数据保存在数据库中可能是一个好主意,这样可以更容易地对其进行编辑并跟踪更改,但随后将其写入配置文件,供实际程序读取

    • 为什么apache必须了解数据库信息才能进行配置

    • 当数据库关闭时,为什么FTP服务器要停止工作

    RE:应用程序日志

    如前所述,数据库可以使日志分析更容易,但我敦促您考虑日志到文件和批导入后的模式。 性能问题

    数据库对于输出随机数据位和输入随机数据位非常有用。日志数据大部分不是随机写入的,而是连续的数据流,非常适合一行接一行地放入文件中。在写入数据方面,您无法超越平面文件的性能。也没有很多东西可以用平面锉刀锉坏。这也让数据库能够专注于实际的业务工作

    然后,您可以从文件中收集所有记录的数据,对其进行解析,执行任何所需的后处理(如从IP地址查找主机名),并将其放入数据库表中。只要你觉得有必要,你就经常这样做。对于我的网站,我真的不需要能够查看访客统计数据从一分钟到另一分钟的变化,所以我在晚上运行日志批处理。如果您需要最新的信息,也可以每60秒运行一次批导入,但这仍然比为每个实际业务事务执行一个额外的INSERT语句要好(当然,这取决于您记录的日志数量)

    安全性

    • 如果数据库是您的日志引擎,如何记录失败的数据库连接

    • 如果数据库在崩溃所涉及的事件发生早期就崩溃了,您如何调查系统崩溃的原因


    所以我认为当你需要数据库中的日志数据并且你为什么需要它时,你应该考虑一下。

    <强>关注易用性和维护性。< /强>我在数据库中存储的唯一日志是由触发器放在那里的,因为这是最容易出错的。但对于其他方面来说,搜索和解析文本日志更快、更容易。如果应用程序崩溃,查看文本配置文件要比查看数据库容易,尤其是对于新的维护人员而言。对于新手来说,在

    config/
    目录中查看
    app.properties
    文件要比查看数据库中的表容易得多

    此外,您可以更轻松地将配置文件存储在source cont中