美文网首页elasticsearch玩转大数据Java学习笔记
五十九、Elasticsearch数据建模--基于全局锁实现悲观

五十九、Elasticsearch数据建模--基于全局锁实现悲观

作者: 编程界的小学生 | 来源:发表于2017-07-22 19:36 被阅读78次

    1、悲观锁有三种锁粒度
    这里讲解的是最粗的一个粒度,全局锁。

    2、如果多个线程都过来要修改数据

    如果多个线程都需要修改mt_index/my_type下的title属性,实际上要进行并发的控制,避免出现多线程的并发安全问题,乐观锁可以用版本号去搞,这里讲解全局锁(悲观锁的最粗粒度)

    3、全局锁是什么?
    全局锁直接锁掉整个my_index

    4、全局锁实验

    PUT /my_index/lock/global/_create
    {}
    

    my_index:你要上锁的那个index
    lock:就是你指定的一个对这个index上全局锁的一个type
    global:就是你上的全局锁对应的这个doc的id
    _create:强制必须是创建,如果my_index/lock/global已经存在那么创建失败,报错。

    5、模拟多线程

    再打开一个浏览器,进入kibana,执行

    PUT /my_index/lock/global/_create
    {}
    

    结果

    {
      "error": {
        "root_cause": [
          {
            "type": "version_conflict_engine_exception",
            "reason": "[lock][global]: version conflict, document already exists (current version [1])",
            "index_uuid": "dTq5iuE3R42azqsrCuN_UA",
            "shard": "2",
            "index": "my_index"
          }
        ],
        "type": "version_conflict_engine_exception",
        "reason": "[lock][global]: version conflict, document already exists (current version [1])",
        "index_uuid": "dTq5iuE3R42azqsrCuN_UA",
        "shard": "2",
        "index": "my_index"
      },
      "status": 409
    }
    

    这时候进行update操作是可以的,因为我全局锁锁的是create

    如果第一个浏览器删除锁
    DELETE /my_index/lock/global
    那么第二个浏览器在执行create操作也将畅通无阻。

    5、全局锁的优点和缺点

    优点:操作非常简单,非常容易使用,成本低
    缺点:你直接就把整个index给上锁了,这个时候对index中所有的doc的操作,都会被block住,导致整个系统的并发能力很低

    若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
    欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:


    qrcode_for_gh_577b64e73701_258.jpg

    相关文章

      网友评论

        本文标题:五十九、Elasticsearch数据建模--基于全局锁实现悲观

        本文链接:https://www.haomeiwen.com/subject/dvgukxtx.html