如果在一个会话中上传和处理 500000 条数据记录是正常操作(C# .NET 3.5 + MS SQL 2005),您如何组织信息管理系统的数据库层、业务逻辑和跨平台 API?

我对经过生产验证的分页模式特别感兴趣,这些模式在并发性、可扩展性和可靠性方面表现良好。

有人有什么想法,朝什么方向挖掘吗?

  • 开源项目(不关心语言或平台,只要不是Ook即可)
  • 图书
  • 文章
  • 谷歌关键词
  • 论坛或新闻组

任何帮助将不胜感激!

更新:

  • 简单的分页(即:SQL 2005中的ROWNUMBER不起作用,因为有很多 同时 更改数据库。在页面请求之间删除或插入的项目会自动使当前页面索引无效。
有帮助吗?

解决方案 3

完成了实施。我最近获悉其中一项上传的记录约为 2148849 条。Tiers 确实成功地处理了上传期间数据库级别的几个断开的连接和数十个死锁。

如果其他人需要一些信息:

其他提示

这是一本很好的书,可以从以下方面入手:

企业应用架构模式 马丁·福勒

当涉及到大量数据的数据库优化时,您很可能会从使用“BigTable”技术中受益。我发现 文章在这里 很有用。简而言之,这个想法是使用数据库非规范化来交换磁盘空间以获得更好的性能。

对于 MS SQL 2005 中的分页,您需要找到有关使用 ROW_NUMBER 函数的更多信息。 这只是一个简单的例子, ,你会使用谷歌找到大量它们(关键词:ROW_NUMBER 分页 SQL 2005)。不过,不要挖掘太多——实现上并没有什么神奇之处,而是如何使用/呈现分页本身。谷歌搜索就是一个很好的例子。

笔记:我们发现 NHibernate 框架本机分页支持不足以满足我们的解决方案。

此外,您可能会对创建 FULLTEXT 索引和使用全文搜索感兴趣。 这是MSDN文章 关于创建全文索引,以及 一些信息 关于全文搜索。

祝你好运。

丹迪卡斯,

感谢您提到部分非规范化。是的,这就是我正在考虑提高某些查询性能的方法。

不幸的是,NHibernate ORM 不适合该解决方案,因为它增加了性能开销。与 SQL 分页相同 - 它在大量并发编辑的情况下不起作用(由 压力测试)

我负责管理一个企业数据仓库,它上传了数十万条记录的一些提要。
我不确定这是否是您的情况,但我们:

  • 接收我们上传到 Sybase 数据库的文本文件。
  • 使用 awk 设置不同提要的格式,以便它们采用通用格式。
  • 使用 bcp 将它们加载到非规范化的中间表中。
  • 运行存储过程来填充规范化的数据库结构。
  • 从非规范化中间表中删除。

这运行得相当好,但我们强制我们按顺序上传。IE。当提要到达时,它们会进入队列,我们​​在查看其余部分之前完全处理队列头部的提要。

这些有帮助吗?

与SQL分页相同 - 它在众多并发编辑的情况下不起作用(如应力测试所检测到)

正如我所提到的,实现分页并没有什么神奇之处——您要么使用 ROW_NUMBER,要么使用临时表。这里的魔力在于评估您最常见的现实世界使用场景。使用临时表和用户跟踪可能有助于克服并发编辑场景。尽管我感觉通过回答问题你会赢得更多:

  1. 用户在移动到另一页面之前在一个页面上停留多长时间?
  2. 用户从第一个页面移动到任何其他页面的频率是多少?
  3. 用户将浏览的常见页面数是多少?
  4. 当用户从一个页面移动到另一个页面并返回时,如果某些信息发生变化,那么这有多重要?
  5. 如果当用户在显示信息的页面上时某些信息被删除,这有多重要?

尽量不要把注意力集中在以下问题上:“如何处理分页时如何处理任何可能的并发编辑方案?”在您首先回答上述问题之前,然后仅处理真正重要的情况。

另一个注意事项是用户界面。检查尽可能多的分页 UI,因为有比左右箭头或排列页码更好的解决方案。一些解决方案有助于隐藏/克服技术上无法解决的寻呼场景。

附:如果这个答案有用,我会将其与第一个答案结合起来。

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