我需要构建一个系统来存储以下数据:
以下是插入/查询的要求:
give me all stocks for field 'X' on interval 'Y'
。必须尽快检索此类查询在预算方面,由于我没有办法购买庞大的服务器和类似SQL-SERVER的东西来存储数据,朋友建议我研究一下MySQL。我尝试过,但是如果我不向表中添加任何索引,查询会非常慢。另一方面,如果我添加索引,插入速度非常慢,所以这也无济于事。 我的机器只有2GB的内存,所以无论哪种方式,索引都不适合内存。
以可扩展的方式存储此类数据的最佳方式是什么(随着时间的推移,我可能会有更多字段...)?根据我的要求和预算,按字段/间隔计算的平面二进制文件是否是最佳解决方案?
(如果它有任何区别,我使用Linux)
答案 0 :(得分:1)
如果您正在处理需要忠实代表的数据并使用强大的索引编制,那么MySQL可能不是您想要的。我建议PostgreSQL,它也是免费的,通常是一个全能的伟大项目(TM)。
平面二进制文件(甚至ASCII)应该是一个不错的解决方案如果您不需要在以后操作数据或进行复杂的连接。如果您将不得不编辑数据在flatfile中的当前位置,你有一个巨大的家务活。如果您需要稍后使用平面文件添加字段,则会有更大的杂事。
PostgreSQL合理地处理索引,并缓存查询性能。如果您根据正在处理的RAM数量调整系统,索引不应该构成太大的挑战。
我建议您根据需要避免使用flatfiles,如果查询仍然太慢,即使使用经过适当调整的RDBMS实例,您也可以找到缩小需要处理的数据量的方法。将每年的数据保存在一个单独的表中是一种简单但易于实现的方法,并且仍然可以通过连接轻松地搜索整个数据库。
编辑:您可以做的另一件好事是分区数据表。这具有各种好处,例如,您可以将需要并行访问的数据移动到单独的驱动器,或者(再次)将单独的时间跨度放在不同的位置。更多信息:
http://www.postgresql.org/docs/8.2/static/ddl-partitioning.html
编辑:有关我为什么建议避开MySQL的更多信息,请允许我在此指导您:http://code.openark.org/blog/mysql/but-i-do-want-mysql-to-say-error