V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
leebs
V2EX  ›  程序员

对于不适合加索引的场景,如何做到数据判重?

  •  
  •   leebs · 2022-02-27 23:35:51 +08:00 · 2166 次点击
    这是一个创建于 1030 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一种是直接查询数据库,但是因为字段没有索引,查询会非常慢。 另一种是双写到缓存中,通过 set 存放和校验重复数据,但这样全量刷新缓存时,会有缓存和数据库数据不一致的可能,有什么好的办法嘛?

    10 条回复    2022-02-28 16:25:26 +08:00
    yhvictor
        1
    yhvictor  
       2022-02-27 23:45:19 +08:00 via iPhone
    没懂全量刷新为啥不一致,望解释。
    单独起个服务器维护个索引不就好了?
    rekulas
        2
    rekulas  
       2022-02-27 23:49:46 +08:00
    @yhvictor 他是说缓存和数据库一致性问题,这个没有真正完美解决方案,日经贴

    缓存是个方案,担心全量刷新出问题具体是如何操作的?是否可以刷新时加锁保证一致性,还有字段为什么不能加索引,查询并发数大概什么级别,不同情况有不同解决方案
    timethinker
        3
    timethinker  
       2022-02-28 00:23:46 +08:00 via iPhone
    不能加索引是因为数据量太大的原因?有没有实际测试过写入的时候性能影响?不要猜测,要动手测试。
    mineralsalt
        4
    mineralsalt  
       2022-02-28 00:36:01 +08:00
    要么查数据库, 要么查缓存, 要么就设计一种保证不会重复的数据生成方案, 例如 UUID
    nebkad
        5
    nebkad  
       2022-02-28 04:01:35 +08:00
    Hash and/or Merkel Tree
    totoro52
        6
    totoro52  
       2022-02-28 10:05:35 +08:00 via iPhone
    我没理解楼主的意思,但不想通过加索引来解决唯一性,可以试试外加一个字段,这个字段是重要值加起来算出来的 md5 ,每次入值时查询一遍这个 md5 ,l 就能达到唯一了
    opengps
        7
    opengps  
       2022-02-28 10:15:55 +08:00 via Android
    哈希值进缓存,写入时候检查比对
    bthulu
        8
    bthulu  
       2022-02-28 11:05:35 +08:00
    缓存不能当数据库用的, 缓存只是缓存, 只用于提高查询性能, 当数据库用, 哪天缓存崩一下搞不死你
    yibo2018
        9
    yibo2018  
       2022-02-28 13:35:33 +08:00
    前几天总结了下这个问题,最终处理方案是把需要唯一的字段拼接起来,创建一个中间表,把这个新的字段当唯一索引
    jones2000
        10
    jones2000  
       2022-02-28 16:25:26 +08:00
    要一致就锁表, 等两边都更新完了,在解锁
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1311 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:41 · PVG 07:41 · LAX 15:41 · JFK 18:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.