CREATE TABLE record (
id INT PRIMARY KEY,
parent_id INT,
count INT NOT NULL
)
我有一个如上定义的表格。字段'parent_id'指的是行的父级,因此整个数据看起来像n-ary树。
根据我的业务逻辑,当请求一行的字段'count'递增时(例如,一个),应该更新所有祖先节点(或行)以增加'count'也是一个领域。
由于这个'count'字段预计会频繁更新(比如1000 / sec),我相信这种递归更新会因为DBMS中的大量级联写操作而导致整个系统变慢。
目前,我认为存储过程是我可以选择的最佳选择。如果MySQL支持Oracle的“连接”这样的操作,那么可能有一些方法很棘手,但显然不是。
有没有有效的方法来实现这个?
提前致谢。
答案 0 :(得分:1)
使用存储过程时,仍需要递归。您只将递归从源代码移动到数据库。
您可以使用nested sets存储分层数据。基本上,您创建了两个其他字段left
和right
left < right
。然后,节点e1
从属于e2
iff e1.left > e2.left && e1.right < e2.right
的下级。
以节省的插入,删除和重定位成本较高的代价来消除递归。另一方面,您所描述的节点内容的更新可以在单个查询中完成。这是有效的,因为索引可用于在单个查询中检索节点及其所有祖先。