首页   注册   登录

begeekmyfriend

Be geek, my friend!
  •   喜马拉雅fm / 音视频炼丹士
  •   V2EX 第 170352 号会员,加入于 2016-04-23 22:34:34 +08:00
    begeekmyfriend 最近回复了
    @v2lf 你认错人了吧?我可是一度吹捧 Linus 的
    @huanghaofu86 我没有 DB 开发经验,全是业余作品
    @fcten 就是上层的缓存啊,底层(包括我的 cache )指的是落地用的
    @fcten 行级锁那是上层概念,底层怎么可能每一条记录上锁?
    @fcten 没听说过一条记录一把锁的,底层只关注 node,你是不是没搞清楚概念?
    @fcten
    1、cache 数目跟线程数目有关系吗? 1W 个线程引用 cache A,只会用一把锁互斥啊
    2、cache A 的锁又不会给 cache B 上锁,这在分裂新节点情况下是不存在竞态的。
    @fcten 不同 cache 对应的 node 如果不存在引用关系,那么就不存在竞态问题和互斥处理
    @fcten 不是吧,一个 cache 对应一个 node 啊,只是在操作内部引用 cache 的时候才上锁。全局锁指的是整个 tree 用一把锁,这才是对 CRUD 操作上锁。
    @svenFeng 对于我目前实现的 B+树来说,实现插入 /查询的并发并非什么难事,我一共只用到 MIN_CACHE_NUM=5 个内存映射 node cache,对每一个 cache 加锁就可以了。
    @svenFeng 粗略浏览了一下 B-link,传说中的分布式索引?有文章证明了插入和查询线程之间的并发正确性,那是因为插入只会分裂新的节点,新分裂的节点不存在引用关系,故而可以避免竞态。而删除则会导致合并,对于已存在引用关系的节点,则必然导致竞态。故而只能用全局锁,对每一个 CRUD 操作加锁,就会损失性能,是这个意思吧?我很好奇如果没有删除,那么废弃的 key 怎么处理?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   2843 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.0 · 9ms · UTC 03:47 · PVG 11:47 · LAX 20:47 · JFK 23:47
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1