要为公司建立一个股票历史数据库, 主要用来查询,当然还有数据的更新,插入 
基本上是近几年的历史数据,记录的是每分钟的数据,每条记录包括时间,价格,成交量等,一年每只股票就有数十万条记录。股票加上外汇基金等有数万只,
比较容易想到的两个方案:
1、建一个数据库,把这些历史数据都放在一个表里, 数据量太大   
2、为每个股票单独做表,表太多了     
    
大家都投个意见吧,谢谢了  

解决方案 »

  1.   

    你估计数据量多大,有多少人使用,要查询多少只股票,一年每只股票就有数十万条记录,如果有1000只股票的话,就是1亿条记录
    似乎MYSQL不适合这么大的数据量
      

  2.   


    如果查询都是基于 select * from tbl where data between xxx and yyy and stockid=123这样,你可以使用方案二。不过仍然建议你使用时间做为分区表。
      

  3.   

    一年 250 天 * 4 小时/天 * 60 分钟/小时 = 60000 记录,并没有你所说的 一年每只股票就有数十万条记录。每条记录包括(股标代码)时间,价格,成交量等,约 80-100字节。一年60000记录*100Bytes = 6MB  近几年的历史数据 估计在30MB左右。 问题并不大。
    但你 股票加上外汇基金等有数万只 20000 * 30MB = 600GB 。这个数据库不算小了。 如果你的需求仅是  主要用于查询某只股票某个时间段数据的查询
    则你还不如直接用数据文件来存储,一个股票一个文件,这样速度可以达到最快。
      

  4.   

    外汇这些是一天24小时交易的:建议用ORACLE之类的大型数据库,性能、安全性比较高
      

  5.   

    一年每只股票就有数十万条记录。股票加上外汇基金等有数万只,
    主要用于查询某只股票某个时间段数据的查询------------------------------------
    按时间分表即可,每表按股票代码建立索引
    因为你是以查询为主,可以在架构上建立master-多slave的架构,再结合lvs访问多slave,这样的架构扩展性强,很容易满足扩展你查询的容量负荷。
      

  6.   

    1.可以把股票,外汇,基金分为三类分别存储,因为三类之间的发生关系的业务操作可能性不大2.每个分类建议是使用分区表的方式存储,可以按年创建分区
      备注:可以考虑先创建好5-10年的分区(或者写个 SHELL脚本自动创建)
      若是决定不够细分:再月创建子分区,分为两级分区
      或者按年分表,再按月创建分区3.使用分区或分表的好处,可以方便地定期删除多少年前的数据