我设计的一个表中的数据库存储的记录条目的申请。有几件事情这让我想想这种设计更多于平常。

  • 然而这些日志条目将是在运行时使用的系统作出决定所以他们需要的是相对较快的访问。
  • 他们还有的问题是,有的是要很多很多(12.5万加入的每个月是我的估计)。
  • 我不需要超过去30到45天,在大多数用于决定处理。
  • 我需要让所有的人都长得多于45天支持和法律问题,可能至少2年。
  • 表格的设计是相当简单,所有简单的类型(没有斑点或任何东西),在那里可能会使用的数据库引擎以把默认数据,至多一个外国的关键。
  • 如果它让任何差异的数据库将Microsoft SQL Server2005年。

我想是让他们写入现场表/数据库,然后使用ETL解决方案将"旧的"条目档案表/数据库-这是大和较慢的硬件。

我的问题是你知道的任何技巧、技巧或建议的数据库/表格的设计,以确保这个工作以及可能吗?如果你认为这是一个糟糕的想法,请让我知道,你在想什么更好的主意。

有帮助吗?

解决方案

一些数据库提供的"分区"(Oracle)。一个分区喜欢看它收集的几个表格有一个相同的定义成一个。你可以定义的标准,这种新的数据进入不同的表(例如一个月或一周的年度%6).

从用户的观点,这只是一个表中。从数据库PoV,这是几个独立的表格,因此可以运行全表的命令(如截断,下降,从表中删除(没有一个条件),装载/卸等等) 对他们以有效的方式。

如果你不能拥有一个分区,得到类似的效果与意见。在这种情况下,可以收集的几个表中一个单一的查和重新界定这一观点,说,一旦一个月的"免费"一个表用旧数据的其余部分。现在,你可以有效地归档,这表明它和将它再次认当大的工作已经完成。这应该有助于大大提高的性能。

[编辑]SQL服务器2005年起(企业版)支持分区。谢谢来 Mitch小麦

其他提示

大表缓慢的下降迅速,这是一个很大的性能的开销用ETL拉数据为基础的日期,从一个大表,然后删除旧行。这个答案是,使用多个表-可能是表1/月的基础上你的数字。当然你需要一些逻辑产生的表名在您的查询。

我同意使用的触发器来填充的'CurrentMonthAudit'表,在结束的一个月,你可以随后改名,表MonthAuditYYYYMM.移动老表掉你的主服务器使用ETL将是容易的,和你的每个表格将便于管理。相信我这比试图管理一个单一的表中有大约250米行。

你的第一个很好的决定是保持一切尽可能简单。

我已经有很好的运用你的模式的一个简单的只写的交易日志文件,其中记录只是规定按时间顺序排列。然后你有几种选择交换了老化的数据。甚至具有每月不同的表格是可查询的明智的,因为只要你保持头脑简单。如果你有任何种类的复制在工作,你的复制的表中可以推出,并作为的档案。然后开始一个新鲜的空表在第一次每月。

通常我不寒而栗的关系的设计后果的做这样的事情,但是我发现了写的只按时间顺序记录表是个例外,通常设计的模式,为的原因你是这里处理。

但是远离诱因。尽可能的。最简单的解决方案是一个主表的类型你说的是这里有一个简单的坚固现有时间证明的复制机制。

(顺便说一句-大表不要慢下来快,如果他们是设计良好的-他们慢慢。)

如果你不需要搜索的最近的日志记录,还有另外一个选择:不要使用一个数据库。相反,写信的登录信息的文件和旋转的文件的每一个夜晚。当一个文件已编写,然后你可以开始背景的工作的进口数据直接进入存档的数据库。

数据库并不总是最佳选择,尤其是对于登录文件:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top