如何从Tarantool中删除数据?

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

DELETE from 'books' where 'timestamp'< 123456789

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

我有一个空间'books'。我执行了以下操作:

books:delete(1)

它删除了一行,但我的空间长度增加了:

books:len()

那么我该怎么做才能在Tarantool中实现呢?

点赞
用户1598057
用户1598057

为了克服 memtx 空间中的“Failed to allocate”错误(vinyl 空间和 vinyl_memory 同理),请在 box.cfg{} 中增加 memtx_memory 参数:

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

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

如果你需要精确知道 vinyl 空间中的元组数,则使用 :count() 更好,但最好避免使用它,因为它的复杂度是线性的(完全扫描整个空间,对于大空间可能非常昂贵)。请参阅文档

2020-02-05 13:26:43