2013-02-19 25 views
1

我正在使用单个数据库的多租户应用程序。一些事情(类别)将允许嵌套,并且在考察嵌套集合方法之前,我已经开始考虑亲子关系。在更新多租户数据库中的嵌套集时是否有替代方法来锁定表?

我对嵌套集的主要关注是在向树中添加或删除项目时(表面)需要锁定表格。在多租户方案中,一个用户的类别修改会对系统上的每个其他用户造成严重的性能影响。

是否有其他方法确保受影响的行不被访问?所有行将由共同的tenant_id标识。

非常感谢您提供任何建议。

+0

更新会影响多少行?你能发表你使用的陈述/程序吗? – 2013-02-20 00:35:07

+0

你必须处理并发。请参阅http://stackoverflow.com/questions/3074946/do-table-locks-scale-would-row-locks-be-more-efficient-for-nested-sets – tsamu 2015-10-27 10:54:50

回答

0

如果您正在修改某行将被锁定的行,则无法绕过该行。但我的猜测是,你的意思是在修改某些行时防止锁定整个表。 为了防止使用InnoDB引擎而不是MyIsam。对任何行进行更改时,MyIsam会锁定整个表,而InnoDB则不会。

请参阅:“为了实现非常高的锁定速度,MySQL对除InnoDB,BDB和NDBCLUSTER以外的所有存储引擎使用表锁定(而不是页锁,行锁或列锁)。” http://dev.mysql.com/doc/refman/5.0/en/table-locking.html

+0

谢谢佐尔坦。我已经看到了一些嵌套设置示例,在操作之前提示LOCK TABLE调用以增加lft和rgt值。现在看来,我可以告诉数据库更新这些值,然后添加新节点,并且一切都会好起来的。不过,级联可能需要一些时间。将进一步测试,但有关InnoDB锁定方案的信息非常好,因为我使用InnoDB for Foreign Keys。 – 2013-02-20 17:20:13

相关问题