插入大量依赖于先前插入的数据

时间:2018-04-11 18:32:09

标签: ruby-on-rails sqlite

我正在尝试在数据库中存储“导航”路径 这些路径作为字符串存储在日志文件中,类似于"a1 b1 c1 d1",其中每个都是“令牌” 我希望每个令牌都存储到它的路径,例如我可以拥有

  

a1 - > b1 - > C1

     

a1 - > b1 - > C2

     

a1 - > b2 - > C2

所以,如果我问所有的subokens为a1,我会得到[b1 => 2,b2 => 1]在令牌上=>计数格式。

这样我可以获得给定标记的所有子标记以及每个子标记的“使用计数”。

可以

  

a1 - > b1 - > C1

     

g1 - > h1 - > B1

但对我来说,那两个b1不一样,计数不应该相同。

不应该有很多令牌,但是日志文件中会有很多条目,所以我希望这些令牌有很大的计数值。

我代表那样的数据(sqlite3): ID; PARENT_ID;令牌;计数

其中parent_id是同一个表的FK。

我的问题是。我的日志中有大约50k条目,我可以拥有更多条目。 我使用以下过程在数据库中插入数据

search for a entry that has the parent_id + token (for the first token the parent_id is null)
EXISTS: Update the count
DON'T EXISTS: Create a entry
Save the ID of the updated entry/new entry as a parent_id
Repeat until there are no more tokens to consume

每个条目平均有4个令牌的50k条目,它提供200k令牌来处理。 它不会在数据库中写入大量数据,因为很多这些令牌都会重复,即使我可以使用不同的parent_id具有相同的令牌。 问题是......它太慢了....我不能在块中执行插入,因为我依赖于现有的id或新ID的id。更糟糕的是我还需要更新计数。

我正在考虑使用某种树来存储这些数据,但是存在这样的问题:可能存在需要保留的旧记录,并且这些数据需要在现有数据之上进行计数。

我可以使用数据库创建树+使用当前数据更新它,但感觉就像是一个过于复杂的问题解决方案。 有没有人知道如何优化这些数据的插入?

我正在使用rails(活动记录)+ sqlite 3。

0 个答案:

没有答案