我有一张桌子叫
products
其中包含列
id
、data
这里的数据是一个 JSONB。 id 是唯一 ID。
我尝试批量添加 1 万个产品,花了将近 4 分钟。 使用较低的产品更新效果很好,但是对于大量产品需要很多时间,我该如何优化它? 我正在尝试批量更新 20 万多个产品,现在我花了超过 5 分钟。
updated_product_ids = []
for product in products:
new_product = model.Product(id, data=product['data'])
new_product['data'] = 'updated data'
new_product['id'] = product.get('id')
updated_product_ids.append(new_product)
def bulk_update(product_ids_arr):
def update_query(count):
return f"""
UPDATE pricing.products
SET data = :{count}
WHERE id = :{count + 1}
"""
queries = []
params = {}
count = 1
for sku in product_ids_arr:
queries.append(update_query(count))
params[str(count)] = json.dumps(sku.data)
params[str(count + 1)] = sku.id
count += 2
session.execute(';'.join(queries), params) #This is what takes so long..
bulk_update(updated_product_ids)
我认为使用原始 sql 执行此操作会更快,但需要花费大量时间..
我正在尝试仅更新大约 8k 个产品,这需要将近 3 分钟或更长时间..