千万级数据量,数据库如何优化,程序如何读取

楠小颜 2016-08-01 10:21:30
目前有个数据量大千万级的项目,表A中每个月生成1500万条数据。
目前考虑水平拆分表方式,预计分为10张表,每张表数据保持300万条。但是不是按时间分割,按每站点的ID分,每个表固定200个站点,但是取数据就会很繁琐,后期维护也很难。

第二章打算表分区,存放在不同硬盘,但是保持一张表。

请问各位大师,哪一种性能会更好???

麻烦给个好的解决方案。谢谢
...全文
762 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
道玄希言 2016-08-05
  • 打赏
  • 举报
回复
一个月 1500 w , 可以尝试按月分表, 一个月的数据存一张表表名规则可以用年月前缀+表名, 查询多月的时候, 拼接表名称, 多月的结果 NUION 一起
专注or全面 2016-08-02
  • 打赏
  • 举报
回复
看你业务怎么读取了,如果是频繁随机读取任何一条数据,那你分区意义不大,经常跨分区读取的话,性能也不会太高 分区我个人认为更多是为了方便管理而不是性能,比如你可以将历时数据单独存放在一个分区,一个文件组中,不用每次对其备份之类的 建议分表,可以按照不同的业务类别分表存储, 不想按照业务拆分的话,或者按照日期分表,不过一个月1500W数据也不算多,表设计的精简一点,应该问题不大。 真不想这么麻烦的话,对历史数据请求不是非常频繁,那你啥也不用干,搞一个历史表,定时把实时表的数据导入到历史表中去
baidu_35758285 2016-08-02
  • 打赏
  • 举报
回复
建立链接读取其他数据库的数据,话说这种业务量的数据用oracle比较好,sql server 感觉有数据量节点,这个我测试过我每次增加100w条数据的查开始时间是线性增长的,突破某一个数据级时处理时间呈几何倍数增长。
kingtiy 2016-08-02
  • 打赏
  • 举报
回复
用分区表就挺好的啊. 如果只是在一台服务器上面,你做10个表维护很麻烦.逻辑也复杂. 用分区表好操作.查询数据的时候,依据分区列索引字段. 另外再做一个分区表,把历史的数据转移到历史的分区表. 需要查询历史数据的时候,只需要做个视图就可以了.
wwhtkill 2016-08-02
  • 打赏
  • 举报
回复
引用 7 楼 u013351366 的回复:
[quote=引用 6 楼 wwhtkill 的回复:] 每个月有1500W数据 分成10个表 每个表300W数据, 这个系统才运行了2个月? 你这个分表方案目前还能搞定 可以1年以后怎么办? 你这个数据的业务需求复杂不复杂?
每个表保持300w条数据,是时间是控制了,值存放三个月的数据,三个月之前的数据打算自动备份到另外一个数据库的表里面的。但是就有出现了一个问题,如何人家查询三个月前的数据,要怎么读取的问题?[/quote] 你相当于是做了一个简单的分库 那么你就需要在查询业务上有一些取舍 把3个月之前的查询 和目前的分开 分别走不通的连接 就是个最简单的路由功能 。分表查询 也是根据你的分表规则算出要去哪个表提取数据,要不你先试试 把10张表做成一个视图 外层只查询这个视图 看看效率如何 。
楠小颜 2016-08-02
  • 打赏
  • 举报
回复
引用 6 楼 wwhtkill 的回复:
每个月有1500W数据 分成10个表 每个表300W数据, 这个系统才运行了2个月? 你这个分表方案目前还能搞定 可以1年以后怎么办? 你这个数据的业务需求复杂不复杂?
每个表保持300w条数据,是时间是控制了,值存放三个月的数据,三个月之前的数据打算自动备份到另外一个数据库的表里面的。但是就有出现了一个问题,如何人家查询三个月前的数据,要怎么读取的问题?
wwhtkill 2016-08-02
  • 打赏
  • 举报
回复
每个月有1500W数据 分成10个表 每个表300W数据, 这个系统才运行了2个月? 你这个分表方案目前还能搞定 可以1年以后怎么办? 你这个数据的业务需求复杂不复杂?
楠小颜 2016-08-02
  • 打赏
  • 举报
回复
引用 4 楼 xiaoxiangqing 的回复:
这样大的数据量,除了提供硬件配置外,其它的就是看大表可不可以拆分为小表
是打算拆分成小表的,可是读取数据感觉方便很麻烦,不知有什么好的方法
xiaoxiangqing 2016-08-02
  • 打赏
  • 举报
回复
这样大的数据量,除了提供硬件配置外,其它的就是看大表可不可以拆分为小表
楠小颜 2016-08-02
  • 打赏
  • 举报
回复
引用 2 楼 x_wy46 的回复:
看你业务怎么读取了,如果是频繁随机读取任何一条数据,那你分区意义不大,经常跨分区读取的话,性能也不会太高 分区我个人认为更多是为了方便管理而不是性能,比如你可以将历时数据单独存放在一个分区,一个文件组中,不用每次对其备份之类的 建议分表,可以按照不同的业务类别分表存储, 不想按照业务拆分的话,或者按照日期分表,不过一个月1500W数据也不算多,表设计的精简一点,应该问题不大。 真不想这么麻烦的话,对历史数据请求不是非常频繁,那你啥也不用干,搞一个历史表,定时把实时表的数据导入到历史表中去
目前是考虑分表的,表拆分成10个表的,每个表固定200个站点,但是在查询数据的时候,查询的站点可能在不同的分表里,需要先判断查询的站点在哪个表里,在联查取数据。
楠小颜 2016-08-02
  • 打赏
  • 举报
回复
引用 10 楼 baidu_35758285 的回复:
建立链接读取其他数据库的数据,话说这种业务量的数据用oracle比较好,sql server 感觉有数据量节点,这个我测试过我每次增加100w条数据的查开始时间是线性增长的,突破某一个数据级时处理时间呈几何倍数增长。
可是客户要求用sql啊
楠小颜 2016-08-01
  • 打赏
  • 举报
回复
自己先支持一下

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧