【问题标题】:store static data in Database or file system将静态数据存储在数据库或文件系统中
【发布时间】:2012-08-29 10:38:15
【问题描述】:

目前,我们通过创建不同的查找表(性别、状态等...)将静态数据(例如性别、婚姻状况、状态等)存储到数据库中。我们有近 10 个查找表。所有这些表都是事务表 - 用户(存储所有用户的人口统计信息)的 FK。其中一些静态数据也被其他事务表使用。现在,在获取用户信息时,我们通常会加入这些表并获取相关文本。当然,这么多的连接会产生性能问题,而且根据 MSDN,我们在选择查询中的连接数不应超过 5 个。现在为避免这种情况,我们可以将所有静态数据移动到 xml 文件并从中读取。当然我们会缓存 xml 数据,所以它只会被读取一次。我想知道是不是一个好办法。我可以看到以下权衡-

  1. 无法保持参照完整性。
  2. 在使用负载平衡时,所有服务器都需要有 xml 文件。

我不希望值在枚举中,因为它们需要本地化。我看到保留在 xml 中的唯一优点是它减少了 DB 的开销(创建 10 个表)。我可以很好地缓存存储在 DB 中的静态数据。那么想知道仍然将数据存储在 xml 中是比 DB 更好的选择吗?

PS:应用程序是 Web 应用程序,在 .net 3.5 中开发。

【问题讨论】:

  • 我认为 MSDN 关于连接数的声明应该被视为指导方针,而不是规则。是否有您想要解决的特定问题?这些查询当前执行缓慢吗?如果是这样,您可能还可以采取其他方法来提高性能,例如索引、在应用程序中缓存,最后将非规范化作为最后的解决方案。
  • 目前没有,因为数据很少,但当我们将 25k 行放入表中时,它肯定会出现。此外,为了明确数据将如何存储在用户表中 - 静态数据的相关 id(例如,用户表将具有 stateid 列,哪个将保存状态 id)将为该用户存储,静态文本将存储在xml 并将根据 id 检索适当的文本。
  • 免责声明:以下是我自己开发的快捷方式,这些快捷方式是我根据多年回溯到 dBase 的 db 资料开发的,用于加速这些类型的问题。我键入的查找表通常是静态的,并且字符串的行数很少(即 PhoeType:Mobile、Home、Work 等)。我不使用整数 ID 对它们进行键控。然后您不需要连接来显示文本,但它仍会为您强制执行完整性并根据需要提供查找。
  • @Punit 考虑到我不知道您的 Sql Server 运行在什么类型的硬件上,这只是一个随机猜测,但我认为您不会看到这种设计的性能问题(假设正确的索引)直到你进入数百万行......Sql Server非常擅长查询这样的关系数据。
  • @Punit - 听起来我会怎么做,到目前为止。请注意,虽然每个 JOIN 确实 成本(就性能而言),但大多数 RDBMS 将能够处理 很多 表引用 - 我已经写了语句几乎有 20 个表引用,但 DB2 的限制是 100+(取决于版本)。对于像“很少”行的静态查找表之类的东西,系统可能会将其保存在内存中。或者,如果您的系统支持它,请考虑物化/索引视图。

标签: asp.net .net sql xml localization


【解决方案1】:

解决方案 1

不要使用合成键,即您的 MaritalStatus 表具有 msId 和 StatusText 列(例如 1,“Married”),并以 msId 为键。然后,您的数据表包含一个 msId 字段,并且必须始终连接到 MaritalStatus 表才能获取文本。 相反,只需存储有用的文本,并将其设置为唯一键。在这种情况下,表格将只包含单个文本列(“已婚”、“单身”等)。 然后数据表有一个 MStatus 文本字段,其中有一个指向 MaritalStatus 表的外键。但是当你读取数据表时,你已经有了状态文本,所以你不需要加入引用表。该约束保持数据完整性。 当然,如果您需要在引用表中存储多个列,这将不起作用,但我仍然建议尽可能避免使用合成键,除非自然键大到足以导致存储问题。

解决方案 2

只有一个 ReferenceData 表。为类型、ID 和值创建列。 使用类型字段而不是单独的表名,例如“婚姻状况”。 连接到为 Type 列指定文字值的引用表,然后匹配 Id 或 Value。这可能也适用于 FK 约束(但需要检查不同的数据库软件)。

【讨论】:

    猜你喜欢
    • 2021-05-31
    • 1970-01-01
    • 2011-10-19
    • 2011-05-31
    • 1970-01-01
    • 2014-05-04
    • 2012-06-29
    • 2012-06-26
    • 2018-04-20
    相关资源
    最近更新 更多