1

我想按条件从 Tarantool 空间中删除数据。我想实现结果等于 SQL 查询:

DELETE from 'books' where 'timestamp'< 123456789

当我使用此查询时,它以错误结尾: Failed to allocate 16384 bytes in mempool for new slab

我有空间books。我做:

books:delete(1)

它删除行但我的空间 len 增加:

books:len()

那么我该如何在 Tarantool 中做到这一点呢?

4

1 回答 1

3

增加memtx_memory参数 inbox.cfg{}以克服 memtx 空间的“分配失败”错误(乙烯基空间和 相同vinyl_memory):

box.cfg{
    <...>,
    memtx_memory = <...>,
    vinyl_memory = <...>,
    <...>,
}

我猜你使用乙烯基引擎。<space object>:len()<index object>:len()估计为 LSM 树中的语句数,并且可能大于空间中的实际元组数。删除操作会在 LSM 树中创建一条语句,因此它会增加 的值:len()

如果您需要乙烯基空间中的确切数量的元组,则使用:count(),但最好避免这种情况,因为它的复杂性是线性的(对整个空间进行全面扫描,这对于大空间可能非常昂贵)。请参阅文档

于 2020-02-05T13:26:43.280 回答