我正在为一个巨大的数据库项目工作,我正在开发一个应用程序,它会立即填充 GB 的数据,我想知道在数据库设计过程中我需要注意的要点,请尽快提出建议。
谢谢
最佳答案
所以 8Tb 对于开始来说并不是那么大,我在 Sql Servers 上管理 2Peta,我可以向你保证三件事:
- 你会犯严重错误并丢失数据
- 你会在某个时候使用任何备份方案
- 你明年不会在线 100%
理解了这些要点后,我希望以下建议对您有所帮助:
- 聘请专业的数据库顾问 - 我推荐 Percona。这是一个更好的 SQL Scheme,它将帮助您调整大小,Scehmes,您甚至可以使用他们的 Active Active 选项来允许使用多个服务器分配工作负载。与他们的系统相比,其他解决方案非常复杂且效果不佳。
现在 8TB 有各种用途,您没有说明您将如何使用它或用于什么,所以我假设您将通过以下方式之一使用它:
一个。高写入负载,简单的提取查询,例如: Select * form table where id =98 ; Id被索引
高写入负载,复杂查询 选择SUM(price) form table where id =98 and field2 IN (a,b,c);
中等工作负载,大量选择查询
所以你应该使用索引字段,你拥有的索引越多,它会占用更多的磁盘空间,插入\更新将花费更长的时间,但选择会更快。
如果你计划高查询率,你必须使用 Innodb,MyIsam 会锁定表,你会卡住。
考虑使用 Master/Slave Scheme 来分担负载,所以所有的选择和备份都应该在从机上运行。
对您的查询运行分析并了解要索引哪些字段,您还可以查看分区以更好地管理您的表,但要注意在错误的键上进行分区它会杀死您的服务器。
确保你的服务器有足够的 IO,MySql Love Io(从磁盘读/写)如果你有 SSD 应该更好。也尝试分配尽可能多的 Ram,InnoDB 可以将所有表上传到 RAM(查看 innodb 的 MyCNF 配置)。
安装 Percona 而不是 MySQL,这将更好地用于:复制、备份、方案更改、表的名称更改、错误日志、表锁定控制等等
运行优化表并提前计划维护,为每个 Scanrio 制定危机计划
备份你的表
练习 Bakcup 恢复
Use file per table,这是一个关键的配置,可以帮助你恢复你的表,否则 mysql 在每个数据库的大文件上创建
取消ip解析,可以节省CPU
有趣的是,MySql 中唯一键的最高数字是 17.. 以备不时之需
删除您不需要的数据,创建脚本来监控需要哪些数据,不要成为一个愚蠢的 DBA 有很多不必要的数据。要求知道数据生命周期并用它来清理y
如果写入率太高,计划使用 ETL .. 例如:保存所有写入的 Memcache,每 5 分钟一次 - 创建多插入查询并在一个查询中写入,最小化 session ..如果不需要实时查询这些数据,当然可以。
如果有一个写入需要将数据写入 SQL 以获得唯一 ID.. 那么这在大量情况下是危险的。这取决于您的硬件。总的来说它很愚蠢。如果你不是在经营银行,那真的没必要.. 尝试创建随机的唯一编号
以易于理解的方式设计您的表格。写下评论,它有一天会对您有所帮助
我希望这对您有所帮助,如果您有任何问题或可以分享更多数据以帮助我更好地了解您的需求,请随时发表评论。
关于mysql - 如何处理超过 8 TB 的巨大 Mysql 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27520038/