sql - 大容量数据库

标签 sql database sql-server-2008 database-design orm

我们正在创建一个数据库,用于存储大量记录。我们估计一张表中有数百万(几年后数十亿)记录,我们总是插入并且很少更新或删除任何记录。它是一种文件系统,我们每天都会在其中插入历史记录。我们将根据用户请求生成关于此历史记录的不同类型的报告,因此我们有一些担忧并需要你们的技术投入:

  • 管理这种表和数据库的最佳方法是什么?
  • 对于非常大的表,我们将来可能会看到什么影响?
  • 一个表中的记录数或表的大小是否有限制?
  • 我们如何假设从不同来源(主要来自 Excel 工作表)插入批量记录?
  • 索引大型数据表的最佳方法是什么?
  • 我们应该在这个项目中使用哪个 ORM(对象关系映射)最好?

最佳答案

你最后的陈述总结了它。没有 ORM 可以很好地处理这种数据量和报告查询:聘请 SQL 专家为您做这件事。你先在这里听到的。

否则

  • 在磁盘上:文件组、分区等
  • 压缩较少使用的数据
  • 是否需要所有数据? (数据保留政策)
  • 行数或表格大小没有限制
  • 通过暂存表或暂存数据库插入,清理/清理/查找键,然后刷新到主表:不要直接加载主表
  • 您可以购买多少内存。然后添加更多。
  • 少量高效的索引
  • 您有父表或平面数据集市吗?有外键但不使用它们(例如在父表中更新/删除)所以不需要索引
  • 使用 SAN(更容易添加磁盘空间、更多卷等)
  • 归一化

其中一些基于我们在 30 个月内通过我们的一个系统处理了大约 100 亿行的经验,峰值为每秒 4 万行以上。

对于高容量系统也请参阅:10 lessons from 35K tps

总结:做对还是不做...

关于sql - 大容量数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6197068/

相关文章:

sql - 更新 MySQL 中的关联表

sql - 将子节点的文本连接成一列

sql - 在数据库 'master' 中创建表权限被拒绝

mysql - 使用 between、date_add 和 getdate 进行年龄搜索的语法中的 sql 错误

PHP 购物车 添加项目

database - 以某种规范格式或 "as entered"存储电话号码更好吗?

sql-server - ADO.NET 与 SSMS 中的 SQL Server 性能对比

SQL Server : the maximum recursion 100 has been exhausted before statement completion

SQL Server while 循环联合所有

database - django AuditTrail 与回归