我正在尝试在数据库中存储“导航”路径
这些路径作为字符串存储在日志文件中,类似于"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。