搜索有关构建大型企业系统的信息
如果在一个会话中上载和处理500000条数据记录是正常操作(C.NET 3.5 + MS SQL 2005),则如何组织信息管理系统的DB层,业务逻辑和跨平台API?
我特别感兴趣的是经过生产验证的分页模式,该模式在并发性,可伸缩性和可靠性方面表现良好。
有人对挖掘的方向有任何想法吗?
- 开源项目(不要在意语言或者平台,只要它不行就行)
- 图书
- 文章
- Google关键字
- 论坛或者新闻组
任何帮助将不胜感激!
更新:
- 简单分页(即:SQL 2005中的行号)不起作用,因为对数据库进行了大量并发更改。在页面请求之间删除或者插入的项目会自动使当前页面索引无效。
解决方案
这是一本很好的书,开头是:
Martin Fowler的企业应用程序架构模式
当涉及到针对大量数据的数据库优化时,我们最有可能会受益于使用BigTable技术。我发现这里的文章非常有用。很快的想法是使用数据库非规范化来交换磁盘空间以获得更好的性能。
对于在MS SQL 2005中进行分页,我们将需要查找有关使用ROW_NUMBER函数的更多信息。这只是一个简单的示例,我们可以使用google(关键字:ROW_NUMBER分页SQL 2005)找到大量的示例。尽管在实现方面没有任何魔力,但不要花太多时间,而要深入了解如何使用/呈现分页本身。 Google搜索就是一个很好的例子。
注意:我们发现NHibernate框架的本地分页支持不足以解决方案。
另外,我们可能会对创建FULLTEXT索引和使用全文本搜索感兴趣。这是有关创建全文索引的MSDN文章,以及有关全文搜索的一些信息。
祝你好运。
丹迪卡斯
感谢我们提到部分非规范化。是的,我正在考虑采用这种方法来提高某些查询的性能。
不幸的是,由于NHibernate ORM增加了性能开销,因此不适合该解决方案。与SQL分页相同,它在大量并发编辑(通过压力测试检测到)的情况下不起作用
我照顾一个企业数据仓库,该仓库上载了数十万条记录的一些提要。
我不确定这是否是情况,但是我们:
- 接收我们上传到Sybase数据库中的文本文件。
- 使用awk格式化不同的提要格式,以便它们采用通用格式。
- 使用bcp将它们加载到非规范化的中间表中。
- 运行存储过程以填充规范化的数据库结构。
- 从非规范化的中间表中删除。
这运行得很好,但是我们强制上传是连续的。 IE。当提要到达时,它们将进入队列,并且我们会在查看其余部分之前完全在队列的开头处理提要。
有帮助吗?
Same with the SQL paging - it does not work in the scenario of numerous concurrent edits (as detected by the stress-testing)
正如我所提到的,使用ROW_NUMBER或者临时表来实现分页是没有魔术的。这里的神奇之处在于评估我们在现实世界中最常见的使用情况。将临时表与用户跟踪一起使用可能有助于克服并发编辑方案。尽管我认为通过回答以下问题我们会赢得更多收益:
- 用户在一页上停留多长时间后才能转到另一页?
- 用户多久从第一页转到任何其他页面?
- 用户浏览的普通页面数是多少?
- 当用户从一页移动到另一页并返回时,如果某些信息发生更改,这有多重要?
- 当用户在显示信息的页面上被删除时,某些信息被删除有多重要?
尽量不要集中在以下问题上:如何在分页时处理任何可能的并发编辑方案?在我们首先回答上述问题,然后再处理真正重要的情况之前。
另一个注意事项是UI。找出尽可能多的分页UI,因为除了左右箭头或者排列的页码外,还有更好的解决方案。一些解决方案有助于隐藏/克服技术上无法解决的分页方案。
P.S.如果此答案有用,请与我的第一个答案结合使用。
完成实施。我最近获悉,其中一项上传约为2148849条记录。在此上载过程中,层级确实在数据库级别成功处理了几个断开的连接和数十个死锁。
如果其他人需要一些信息:
- 产品页面
- 异常处理措施政策