Hash Berkeley DB:哈希访问方法的锁对象数
这个页面说“对于散列访问方法,您只需要一个锁对象” 这是否意味着访问数据库的所有进程/线程都将尝试锁定同一个锁对象?它不会导致非常高的锁争用吗 谢谢Hash Berkeley DB:哈希访问方法的锁对象数,hash,locking,berkeley-db,Hash,Locking,Berkeley Db,这个页面说“对于散列访问方法,您只需要一个锁对象” 这是否意味着访问数据库的所有进程/线程都将尝试锁定同一个锁对象?它不会导致非常高的锁争用吗 谢谢 --Michi这里描述的是如何计算应用程序所需的锁对象数量,尽管默认的锁对象配置(1000)通常就足够了。它描述了一个给定的单个数据访问操作将需要多少个锁对象,这样您就可以将其乘以并发数据访问操作的数量,并适当地配置锁对象的数量。它并不是真的在谈论锁争用 对于哈希访问方法,给定的键值直接映射到哈希桶。只有一个页面需要查看(并锁定)才能访问数据。这
--Michi这里描述的是如何计算应用程序所需的锁对象数量,尽管默认的锁对象配置(1000)通常就足够了。它描述了一个给定的单个数据访问操作将需要多少个锁对象,这样您就可以将其乘以并发数据访问操作的数量,并适当地配置锁对象的数量。它并不是真的在谈论锁争用 对于哈希访问方法,给定的键值直接映射到哈希桶。只有一个页面需要查看(并锁定)才能访问数据。这与Btree(需要遍历内部索引节点才能访问数据)和Queue(需要锁定每条记录和记录所在的页面)不同 在最近的版本中,我们实际上消除了一些不需要的锁,因此更简单的方法是: 每个数据库操作都需要
- 正在访问的页面(Btree、Hash或Recno)或记录(Queue)的一个锁对象
- 加上元数据页的一个锁对象
- 加上一个锁定对象(如果需要Btree页面拆分)
- 如果正在使用队列,则每页加一个锁对象