diff --git a/DB.py b/DB.py index dd2fb72..f02776a 100644 --- a/DB.py +++ b/DB.py @@ -704,10 +704,6 @@ class DBSA: # ---------------------------------------------------- @classmethod def upsert_video(cls, data: dict): - """ - 业务线程/进程调用此方法写入。 - 如果启用了 queue 模式,则把 data 丢队列即可。 - """ if cls._queue_mode: cls._queue.put(data) return @@ -721,7 +717,6 @@ class DBSA: now_ts = int(time.time()) op_index_key = (data["v_xid"] or "", data["keyword"] or "", now_ts) - # —— 用 v_name 去重,避免 title 冲突 —— vid_index_key = (data["v_xid"] or "", data["v_name"] or "") # ---------- ① 获取互斥锁 ---------- @@ -739,13 +734,12 @@ class DBSA: v_xid=data["v_xid"], a_id=data["a_id"], level=data.get("level", 0), - name_title=data["v_name"], # ✨ NEW: 截断避免过长 + name_title=data["v_name"], keyword=data["keyword"], is_repeat=data["is_repeat"], sort=data["sort"], - createtime=now_ts, - updatetime=now_ts, - operatetime=now_ts, + createtime=now_ts, # 首次插入 + updatetime=now_ts, # 后续更新只改这一列 batch=data.get("batch", 0), machine=data.get("machine_id", 0), is_piracy=data.get("is_piracy", '3'), @@ -772,7 +766,6 @@ class DBSA: status=1, createtime=now_ts, updatetime=now_ts, - operatetime=now_ts, watch_number=data.get("view", 0), follow_number=data.get("fans", 0), video_number=data.get("videos", 0), @@ -891,10 +884,9 @@ class DBSA: if op_rows: stmt_op = mysql_insert(video_op).values(op_rows) ondup_op = stmt_op.on_duplicate_key_update( - updatetime = stmt_op.inserted.updatetime, - operatetime = stmt_op.inserted.operatetime, - ts_status = stmt_op.inserted.ts_status, - is_repeat = stmt_op.inserted.is_repeat, + updatetime = stmt_op.inserted.updatetime, + ts_status = stmt_op.inserted.ts_status, + is_repeat = stmt_op.inserted.is_repeat, ) cls._safe_execute(ondup_op, desc="video_op") logger.info("落表:操作记录 %d 条", len(op_rows)) @@ -920,7 +912,6 @@ class DBSA: u_name = stmt_vid.inserted.u_name, status = stmt_vid.inserted.status, updatetime = stmt_vid.inserted.updatetime, - operatetime = stmt_vid.inserted.operatetime, ) cls._safe_execute(ondup_vid, desc="video") logger.info("落表:视频记录 %d 条", len(vid_rows)) @@ -944,9 +935,6 @@ class DBSA: # ---------------------------------------------------- @classmethod def start_single_flusher(cls): - """ - 启动后台线程 —— 生产线程只喂 queue,flusher 串行写库,彻底避免锁竞争。 - """ cls._queue_mode = True def _worker(): @@ -955,19 +943,17 @@ class DBSA: try: data = cls._queue.get(timeout=3) batch.append(data) - # drain 队列 while True: try: batch.append(cls._queue.get_nowait()) except Empty: break except Empty: - pass # 队列暂时为空 + pass if not batch: continue - # ---- 把 batch 数据重新写入缓冲(无锁)---- for d in batch: cls._buffer_without_lock(d) batch.clear() @@ -994,7 +980,6 @@ class DBSA: if op_key in cls._existing_op_keys or vid_key in cls._existing_vid_keys: return - # —— op_row 同构 —— op_row = dict( v_id=data["v_id"], v_xid=data["v_xid"], @@ -1006,7 +991,6 @@ class DBSA: sort=data["sort"], createtime=now_ts, updatetime=now_ts, - operatetime=now_ts, batch=data.get("batch", 0), machine=data.get("machine_id", 0), is_piracy=data.get("is_piracy", '3'), @@ -1031,7 +1015,6 @@ class DBSA: status=1, createtime=now_ts, updatetime=now_ts, - operatetime=now_ts, watch_number=data.get("view", 0), follow_number=data.get("fans", 0), video_number=data.get("videos", 0), @@ -1042,4 +1025,4 @@ class DBSA: cls._buf_vid.append(vid_row) cls._buf_payload.append(data) cls._existing_op_keys.add(op_key) - cls._existing_vid_keys.add(vid_key) \ No newline at end of file + cls._existing_vid_keys.add(vid_key)