gpt4 book ai didi

python - Cloud Bigtable : when I filter by column, 我的修改请求是原子的吗?

转载 作者:行者123 更新时间:2023-12-01 00:33:57 34 4
gpt4 key购买 nike

在我的 Cloud Bigtable 表中,每秒有数百万个请求。我获得了一个唯一的行键,然后我需要使用原子突变来修改该行。

当我按列过滤以获取 key 时,每个请求都是原子的吗?

col1_filter = row_filters.ColumnQualifierRegexFilter(b'customerId')
label1_filter = row_filters.ValueRegexFilter('')
chain1 = row_filters.RowFilterChain(filters=[col1_filter, label1_filter])

partial_rows = table.read_rows(filter_=chain1)

for data in partial_rows:
row_cond = table.row(data.cell[row_key])
row_cond.set_cell(u'data', b'customerId', b'value', state=True)
row_cond.commit()

最佳答案

CheckAndMutateRow operations are atomic ,但它是检查和改变而不是行。因此,您的设置方式不会创建原子操作。

您需要创建一个conditional row使用 rowkey 和过滤器的对象,提供修改,然后提交。就像这样:

col1_filter = row_filters.ColumnQualifierRegexFilter(b'customerId')
label1_filter = row_filters.ValueRegexFilter('')
chain1 = row_filters.RowFilterChain(filters=[col1_filter, label1_filter])

partial_rows = table.read_rows()

for data in partial_rows:
row_cond = table.row(data.cell[row_key], filter_=chain1) # Use filter here
row_cond.set_cell(u'data', b'customerId', b'value', state=True)
row_cond.commit()

因此,您必须进行全表扫描并将过滤器应用于每一行。如果您应用该过滤器,则您已经进行了全面扫描,因此不应存在性能差异。对于 Cloud Bigtable 的最佳实践,您希望避免全表扫描。如果这是一个您需要运行的一次性程序,那就没问题,否则,如果您要定期执行此操作,您可能需要找出一种不同的方法来执行此操作。

请注意,我们是 updating the API更清楚地了解不同类型的突变。

关于python - Cloud Bigtable : when I filter by column, 我的修改请求是原子的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57951750/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com