重时间数据记录的数据库设计

时间:2010-03-15 13:39:39

标签: mysql database database-design postgresql

我有一个应用程序,我收到每个数据40.000行。我有500万行要处理(500 MB的MySQL 5.0数据库)。

实际上,这些行存储在同一个表中=>更新速度慢,难以备份等等。

在此类应用程序中使用哪种方案以允许长期访问数据而不会出现太大的表,容易备份,快速读/写等问题?

出于此目的,postgresql是否优于mysql

6 个答案:

答案 0 :(得分:2)

我们现在拥有100-200万行的日志表,这非常痛苦。

  • 备份是不可能的,需要几天的停机时间。

  • 清除旧数据变得太痛苦 - 它通常会将数据库连接几个小时

到目前为止,我们只看到了这些解决方案:

  • 备份,设置MySQL从站。备份从站不会影响主数据库。 (我们还没有这样做 - 因为我们加载和转换的日志来自平面文件 - 我们备份这些文件并在发生故障时可以重新生成数据库)

  • 清除旧数据,我们发现只有无痛的方法是引入一个新的整数列来标识当前日期,并在每天对该密钥进行分区(需要mysql 5.1)。删除旧数据是一个丢弃分区的问题,这很快。

如果另外你需要在这些表上连续进行事务处理(而不是只是偶尔加载数据并且主要查询那些数据),你可能需要查看InnoDB而不是默认的MyISAM表。

答案 1 :(得分:2)

1 - 40000行/天不是那么大

2 - 根据插入日期对数据进行分区:您可以通过这种方式轻松删除旧数据。

3 - 不要犹豫,通过数据智能步骤。 (计算中间表中经常询问的指标)

仅供参考,我已经将PostgreSQL与包含几GB数据的表一起使用而没有任何问题(并且没有分区)。 INSERT / UPDATE时间不变

答案 2 :(得分:1)

一般的答案是:你可能并不是一直需要所有细节。

例如,您可以在DailySales表(每天一条记录)或甚至一组表(DailySalesByLocation =每天每个位置一条记录,DailySalesByProduct = 1)中创建记录,而不是将每笔销售保留在一个巨大的Sales表中。记录每个产品每天等。)

答案 3 :(得分:0)

首先,在关系数据库中并不总能很好地处理大量数据。

一些人所做的是将大量数据集放入文件中。普通的旧文件。快速更新,易于备份。

对文件进行格式化,以便数据库批量加载器能够快速运行。

其次,没有人分析大量数据。他们很少总结5,000,000行。通常,他们想要一个子集。

因此,您编写简单的文件过滤器来剪切其子集,将其加载到“数据集市”并让他们查询。您可以构建他们需要的所有索引。观点,一切。

这是处理“数据仓库”的一种方法,这就是你的问题听起来像。

答案 4 :(得分:0)

首先,确保您的日志记录表没有过度索引。我的意思是每次你从表中插入/更新/删除任何你需要更新的索引,这会减慢进程的速度。如果在日志表中指定了大量索引,则应对其进行批判性查看,并确定它们是否确实是必需的。如果没有,请放弃它们。

您还应该考虑归档过程,以便将“旧”日志信息以任意间隔(例如每月一次或每年一次)移动到单独的数据库。这完全取决于您的日志的使用方式。

答案 5 :(得分:0)

这是NoSQL DB可能有用的东西,如果你没有做那种需要复杂连接的报告。

CouchDBMongoDB和Riak是面向文档的数据库;它们没有SQL的重量级报告功能,但是如果你要存储一个大型日志,它们可能就是故障单,因为它们比SQL DB更简单,并且可以更容易扩展。

他们比Cassandra或HBase(不同类型的NoSQL)更容易上手,你可能也会考虑这些。

来自this SO帖子: http://carsonified.com/blog/dev/should-you-go-beyond-relational-databases/