2017-06-09 60 views
0

让我们来看看这个数据库结构如何在mysql中优化这些数据的存储?

Iterations 
    id (primary key) 
    start (timestamp) 
    end (timestamp nullable) 

Items 
    id (primary key) 
    title (text) 
    foreign_id (integer) 
    location (point nullable) 
    some other text fields 

Iteration_items 
    iteration_id (foreign key to iterations(id)) 
    item_id (foreign key to items(id)) 

每小时

1. Create new record in `iterations` with `start` equals to now 
2. Do some processing and store about 5000 records in `items` table (plus 5000 records in `iteration_items`), so every `iteration` contains about 5000 items. 
3. After it is done set `end` to now for latest `iteration` 

问题:每iteration(主要是在items表)需要大约盘100MB的数据,我不能以某种方式压缩该数据(里面有一些文字)。

可以有多个重复:

1. Iteration 34 contains item with foreign id 837435. 
2. Iteration 35 contains item with foreign id 837453 
3. ... 
4. Iteration 42 DOES not contain item with foreign id 837453 

数据项与国外ID 837435可以迭代之间改变。

例如:

iteration 34 
     point(1.1,2.2) 
     title 'some example text' 
    iteration 35 
     point(1.1, 2.3) 
     title 'another example text' 

我需要存储这些数据,这样以后就可以进行比较。

如何处理连续增长的数据库?

回答

1

拥有一个快速增长的数据库并不是“问题”,可以这么说,尤其是当结构是健全的时候,就像你的那样。另一方面,当你说“存储这些数据以便日后可以进行比较”时,你觉得你可能需要一个分析数据库来补充你的MySql数据库。这种类型的软件旨在存储大量的数据(不占用大量的磁盘空间)并快速查询它们。

也许您应该考虑在您的MySql数据库中只存储最新数据,并定期与数据仓库同步。这可能会好得多。

看一看这篇文章,它有一些很好的建议:

Choosing a Database

另外,这里有一些个人细节,你可以考虑:

Infobright的:MySQL的datawarehousing解决方案。免费的社区版,只允许你插入数据,而不是修改它。与MySql完美集成。

PostgreSQL:通常不是数据仓库,但仍可以很好地处理大量数据,并保持良好的性能水平。

Vertica:惠普的解决方案有一个免费的社区版。超快,功能强大,但可能很难与PHP(我们目前在我工作的地方使用)之类的东西进行整合。