Как удалить данные из Tarantool? - PullRequest
0 голосов
/ 31 января 2020

Я хочу удалить данные из пространства Tarantool по условию. Я хочу получить результат, равный SQL -запросу:

DELETE from 'books' where 'timestamp'< 123456789

Когда я использую этот запрос, он заканчивается error : Failed to allocate 16384 bytes in mempool for new slab

Я получил пробел books. Я делаю:

books:delete(1)

это удаляет строку, но мой пробел увеличивается:

books:len()

Так как я могу сделать это в Tarantool?

1 Ответ

2 голосов
/ 05 февраля 2020

Увеличьте параметр memtx_memory в box.cfg{}, чтобы преодолеть ошибку «Не удалось выделить» для пространств memtx (то же самое для виниловых пространств и vinyl_memory):

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

Я предполагаю, что вы используете виниловый мотор. <space object>:len() или <index object>:len() оценивается как число операторов в дереве LSM и может быть больше, чем фактическое число кортежей в пространстве. Операция удаления создает инструкцию в дереве LSM, поэтому она увеличивает значение :len().

Если вам нужно точное количество кортежей в виниловом пространстве, используйте :count(), но это лучше чтобы избежать этого, потому что его гибкость является линейной (полное сканирование всего пространства, что может быть очень дорого для больших пространств). См. документацию .

...