-1

当我使用voltdb(内存数据库)时,我发现一个奇怪的现象:插入重复的原始数据(500ms)比插入新列(10ms)需要更多的时间,并且表已经分区。据我所知,插入重复数据应该更快地返回,因为不需要执行真正的插入操作。

4

1 回答 1

0

看起来您正在测量的是返回客户端的响应时间,这可能无法反映执行时间。这可能取决于客户端对成功结果和错误结果的处理方式,或者可能只是随机网络延迟,或者在您发送请求时有多少其他事务在您的请求之前排队。

要测量插入新记录或尝试插入重复记录所需的实际时间(并使其失败并返回唯一约束违规),您可能需要隔离并重复足够多的事务以从内置统计。

假设您有一个带有主键的分区表。这是我将如何衡量这一点:

  1. 调用“exec @Statistics PROCEDUREPROFILE 1;”,但您可以忽略这些初始结果。
  2. 通过调用 TABLENAME.insert 过程将 50-100 条唯一记录插入到您的表中。
  3. 调用“exec @Statistics PROCEDUREPROFILE 1;” 并查看 TABLENAME.insert 过程的 avg_execution_time 列。此平均值应仅适用于您在调用 @Statistics 之间所做的唯一插入。
  4. 使用 TABLENAME.insert 过程插入 50-100 条重复记录。
  5. 调用“exec @Statistics PROCEDUREPROFILE 1;” 并查看 TABLENAME.insert 过程的 avg_execution_time 列。此平均值应仅适用于您在调用 @Statistics 之间所做的重复插入。

我自己没有测试唯一插入与插入约束违规的速度。一般来说,无论结果如何,插入都很快,但我怀疑你的直觉是正确的,失败的重复插入可能会执行得更快,因为它必须检查任何一种方式,但如果发现重复,则无需插入。

免责声明:我为 VoltDB 工作。

于 2018-01-24T14:25:55.603 回答