You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

高频更新场景下检查字典列表、避免添加重复数据的最快方法

高性能部分校验去重方案

针对你的高频更新、仅需校验最近历史条目的场景,最优实现是采用定长窗口哈希校验方案,性能远高于遍历最后25条的实现,单次校验耗时稳定在O(1)级别,完全不受全量列表长度影响。

核心逻辑

你的重复条目仅会出现在回滚时间对应的最近N条范围内,因此不需要维护全量数据的哈希,仅需缓存最近25条(可根据回滚时长调整)的唯一标识即可:

  1. 先确定条目的唯一键组合:你的场景下contract_id + value_at + metric三个字段可唯一标识一条数据,不会出现同合约、同时间、同指标对应不同值的情况。
  2. 维护两个辅助结构:定长队列控制缓存的键数量,哈希集合做O(1)的重复校验。

实现代码

import datetime
from decimal import Decimal
from collections import deque

# 业务数据存储列表,最终可直接转DataFrame
data_list = []
# 定长队列,最多保留最近25条的唯一键,可根据回滚时长调整maxlen
key_queue = deque(maxlen=25)
# 哈希集合,用于快速校验重复
recent_unique_keys = set()

def add_new_item(new_item: dict) -> bool:
    # 生成可哈希的唯一键,可根据业务调整字段组合
    unique_key = (
        new_item["contract_id"],
        new_item["value_at"],
        new_item["metric"]
    )
    # 重复校验,O(1)耗时
    if unique_key in recent_unique_keys:
        return False
    # 新增非重复数据
    data_list.append(new_item)
    # 更新键缓存
    key_queue.append(unique_key)
    recent_unique_keys.add(unique_key)
    # 队列满时清理最早的旧键,避免集合无限膨胀
    if len(key_queue) == 25:
        old_key = key_queue[0]
        recent_unique_keys.discard(old_key)
    return True

方案优势

  • 性能远高于遍历最后N条的实现:哈希查找的耗时稳定在微秒级,哪怕每秒更新上千次也不会有性能瓶颈
  • 内存占用极低:仅存储25个元组的缓存,几乎可以忽略不计
  • 扩展性强:如果后续回滚时长增加,仅需调整deque的maxlen参数即可,性能不受影响

内容的提问来源于stack exchange,提问作者Mat90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 16:06:00