我们使用Access数据库作为我们软件产品的后端。该程序已在公司进行了alpha / beta测试约2年,我们已经注意到我们的一个表已经填充了超过十万条记录。这可能不是我们的产品将持续使用最多的一个例子,我们担心未来5到10年的性能。
我们有一种逻辑方式可以将这个庞大的表分解为包含几百条记录的数千个表,但我不认为这个解决方案可能会对任何可能的减速有所帮助,因为数据库会变得臃肿而不是表数据(虽然我没有正式的数据库培训,所以我知道)。
我希望有人能够提供更多信息,因为我可能会对我们是否可能会出现明显的放缓有所了解,如果是这样,哪种解决方案可能会长期保持良好的业绩?
答案 0 :(得分:2)
数据库通常经过优化以处理大量行;问题是,你能保持几千张几乎相同的牌桌吗? (很少有,编码很复杂)
首先,测试可能的场景。我不熟悉你的数据,所以我不能告诉你数据库的数百万行是否太多(毕竟,这是MS Access,而不是真正的数据库)。
如果您发现表格大小有问题,并且您的数据集可以分为较少使用(较旧的?)和最近的数据,我建议将表格拆分为两个:table和table_archived(其中包含较少使用的/旧记录)。这可能是表大小和可管理性之间的合理折衷。
答案 1 :(得分:1)
听起来有点过分,但是horizontal partitioning是一种非常合理的性能优化策略,可用于许多数据库平台。
使用MS Access,即使数百万行,您也不会在设计良好的数据库上看到很多性能下降。此外,如果您经常压缩和修复,拥有大量表格不会对性能问题造成太大影响,但更大的问题是维护的复杂性。我说不要拆分表,直到它至少有一百万行和/或显示该表上的查询性能问题。
这就是问题:如果用户不断查询需要UNION回到一起的分区中的多个表,这种类型的分区会严重影响性能。在分区包含不经常搜索的归档记录的情况下,它可以更好地工作。如果您认为需要经常查询表格,请不要去那里。
您最大的可扩展性障碍将与用户数量相关。如果您预计有100个用户需要非常仔细地计划,或者考虑使用客户端 - 服务器数据库后端。
答案 2 :(得分:1)
问题是架构问题,如果您正在考虑的表分区不适合实际数据,那么它会加剧性能问题,而不会改善它们。关于2GB的文件大小限制,如何对数据进行切片和切块并不重要 - 如果你接近这个限制(在50%之内,我会说),你真的需要一个记住道路。
关于Jet / ACE数据存储的问题,我想说任何具有数百个记录的表的应用程序已经是一个应该进行评估以进行升迁的应用程序。如果它有可能/可能有数百万条记录,我会说这是一个不费脑筋的事情 - 升级。
这不是因为Jet / ACE的任何不足,只是因为随着需求的变化,适当的技术变化。一对已婚夫妇在结婚时可能会发现Mini Cooper很不错,而且可以容纳他们的第一个孩子就好了,但是如果他们考虑更多的孩子,他们应该认真考虑买一辆更大的车 - 不是因为有什么不对使用Mini Cooper,但是因为它们已经超出了它最适合的效果。
答案 3 :(得分:0)
该程序已经过alpha / beta测试 现在在公司工作了大约2年
在过去的大约10年中,Microsoft建议人们不要将Access用作数据库,而是使用各种版本的SQL Server。
我们关注表现 未来5 - 10年
鉴于拉特的发展 - 10年我不会。我会非常担心Access是否真的能够在未来10年内存储数据,或者调用是否是“sql server的程序”。
我们有合理的方式来打破 把这张巨大的桌子分成几个 千表包含几个 百条记录,但我不认为 这个解决方案可能会有所帮助 任何可能的数据库减速 用桌子会变得臃肿 而不是数据
Access能够处理一百万或五百万条记录。 SQL Server很好地进入了数十亿条记录。在你遇到Access问题的那一刻,基本上,你可以获得任何基于的问题 - 而且我真的找不到更好的说法 - 甚至尝试使用严格的数据库访问的巨大无知 - 就像我一样已经说过了 - MS在过去10年里对此表示不满。
成千上万的桌子分开桌子是不明智的; SQL数据库不是为此而设计的。即使在SQL Server Enterprise中使用群集表(正是这样做)也不会真正针对您拥有数万个分区。
您很可能只是在访问中死亡 - 访问权限不是数据库服务器。回到绘图板。
也就是说,Access大约18年前左右添加了一些FoxPro获得的技术,使其能够轻松处理数百万条记录(不是几十万条)的表格,所以此刻你很安全(除了噩梦)尝试在类似的东西上进行数据库修复,备份等,甚至是通过网络共享运行多用户应用程序的噩梦。
SQL Server,otoh,我有一张表,目前有大约6.5亿条记录,在未来6个月内,当数据加载开始时,这些记录增长到大约10或200亿条,到目前为止没有任何问题。
答案 4 :(得分:0)
我将避免在此主题中进入访问-v-SQL服务器辩论,而只是回答OP的问题。
如果可以拆分数据并且人们不会在这些拆分中查询,那么它可能是一个值得测试的选项,但是在访问中有2048个开放表的限制,因此您可能需要注意这一点。
之前已经说过,如果你不得不问什么是最大数量的东西,那么你做错了很可能,我想这就是一个例子。如果它将它分成10个表可能只有数千个?我将传递那个