大型数据库架构与小型架构和BLOB / CLOB XML

时间:2013-06-03 21:12:58

标签: sql-server database orm mfc large-data

我在StackOverflow上搜索过,我还没有找到这个讨论,所以我想在这里发帖,以获得社区的意见。我也认为这个讨论可能适用于那里的其他团队,所以希望这结果是一个有用的帖子。如果这是一个重复的主题,请告诉我,我将删除它。

背景 我正在开展一个相当大的合同软件项目,现在已经有15年了。此系统是客户端 - 服务器样式的应用程序,具有SQL Server数据库和在Windows上运行的MFC / C ++编写的胖客户端。此应用程序的API完全是平面的,非面向对象的,因为它完全封装在COM中。该数据库大致有780个表,该应用程序有超过700万行代码。在过去的8年左右的时间里,大多数表都已添加,并且随着新的增强请求的推出,我们认为这种情况不会很快放缓。最初的架构方法是将所有内容存储在表/列中,就像它在类层次结构中一样。确切地说,ORM框架如何工作(Hibernate,Entity等)来保存数据 在过去几年中,我们的客户表达了重新构建系统并完全重写应用程序的愿望,因为系统本身已经过度增长,并且受到COM的严重限制。我们有机会重新架构系统的现代化,我们有一个问题是关于数据库的可扩展性。

主要问题: 由于我们现在有780个表,并且我们预计在不久的将来会突破1000个表,我们是否有意义继续使用这种架构方法或创建10到20个表并将几乎所有数据存储在BLOB列中XML? 700个表中的600个表可能是单亲班级,有大量的孩子和孩子的孩子等等。

我的想法: 我已经编写了两种方式的程序,我认为通过将数据作为XML存储在blob中可以获得显着的性能提升,因为没有100或1000个查询被触发来插入和检索数据。根据我的经验,解析XML的性能比处理1000个表的数据库要快得多。 XML方法的另一个优点是它通常不需要架构更改。另一方面,XML也存在性能问题。

如果您知道,请发表有关此主题的想法,事实和任何研究。所有信息都会有所帮助和赞赏。

提前致谢!

1 个答案:

答案 0 :(得分:2)

在各种数据库技术中使用大型数据系统后,我建议不要使用XML来完成任务。

好消息是,SQL Server当然支持XML数据类型,您实际上可以在TSQL中对XML运行非常复杂的查询。因此,您甚至不需要将XML吸入应用程序中以创建存储过程作为示例。

在关系数据存储中将序列化数据存储为XML时遇到的问题:

  1. 很慢。在SQL Server中使用XML数据类型运行一些测试,您会发现在TSQL中检查它比仅仅带回"常规"数据

  2. 太冗长了。 XML的大小比JSON这样的格式要大得多。您将无法使用JSON查询TSQL中的数据,但是当对象变大时,节省空间会很好。

  3. 在维护在SQL Server中存储XML的遗留应用时,我无法告诉您有多少次我撞到墙上。如果找不到最初序列化/反序列化XML的代码,那就太令人沮丧了。现在看起来似乎不是一个问题,但是当你在未来几年内将其他新开发人员带入系统时,这将成为一个问题。

  4. 这可能是个人偏好,但最近没有人使用XML进行数据存储。 JSON是最新最好的。像CouchDB,MongoDB,Elastic Search这样的文档数据库都使用JSON作为他们的通用语言。如今,所有工具都使用JSON。它仍然允许您轻松地序列化/反序列化对象,它更轻,在我看来,阅读并不那么难看。 =)

  5. 底线:

    我至少考虑使用文档数据库(MongoDB,CouchDB,Couchbase,Riak,Elastic Search)。不同的心态,但可能会让生活更轻松。

    如果没有,那么我仍然会使用blob,但强烈考虑使用JSON。

    如果不这两个,我只会使用SQL Server中的XML数据类型来存储XML对象。