Size: a a a

2021 June 13

EL

Eugene Leonovich in Tarantool
пытаюсь реализовать 'insert into * on duplicate key update' через upsert(), но что-то не выходит каменный цветок
источник

EL

Eugene Leonovich in Tarantool
есть спейс c полями (id, name, opt), на id - автоинкремент, на name - уникальный индекс. делаю upsert():

box.space.TEST:upsert({nil, 'foo', 1}, {{'=', 3, 2}})
---
- error: 'Tuple field 1 type does not match one required by operation: expected unsigned'
источник

EL

Eugene Leonovich in Tarantool
причем insert(nil, 'foo', 1) или replace(nil, 'foo', 1) работают
источник

EL

Eugene Leonovich in Tarantool
пробовал еще так:

box.space.TEST:upsert({box.sequence.TEST:next(), 'foo', 1}, {{'=', 3, 2}})
---
- error: Duplicate key exists in unique index 'NAME_IDX' in space 'TEST'
источник

VG

Vladislav Grubov in Tarantool
да, апсерт только праймари ключ проверяет, по куску тапла
источник

EL

Eugene Leonovich in Tarantool
какой тогда есть способ реализовать 'on duplicate key update' не по примари?
источник

VG

Vladislav Grubov in Tarantool
поселектить по соответствующим индексам
источник

EL

Eugene Leonovich in Tarantool
написать луа функцию, в которой сперва поселектить и в зависимости от результата сделать инсерт или апдейт, так?
источник

EL

Eugene Leonovich in Tarantool
в транзакцию оборачивать не нужно?
источник

VG

Vladislav Grubov in Tarantool
да
источник

DO

Dmitry Oboukhov in Tarantool
если только один инсерт то и транзакцию можно не делать
источник

Е

Евгений in Tarantool
хорошая статья
источник

ВО

Виталий Охримук... in Tarantool
подскажите, как правильно загрузить в tarantool некоторый объем данных?

есть cvs файл, примерно 20 млн строк, 20 полей в каждой строке
источник

ВО

Виталий Охримук... in Tarantool
конвертация строк в вид u:insert{xx,yyy,zzz...}  с последующей передачей в tarantoolctl enter test < test.lua работает как-то слишком медленно
источник

ОБ

Олег Бабин in Tarantool
Вставляйте в одной транзакции сразу несколько тысяч строк, а не на каждую отдельный insert
источник

ВО

Виталий Охримук... in Tarantool
5000 строк сейчас в одной транзакции
источник

ВО

Виталий Охримук... in Tarantool
я правильно понимаю, делаем box.begin(), потом 5000 insert-ов, потом box.commt() ?
источник

ОБ

Олег Бабин in Tarantool
да
источник

ВО

Виталий Охримук... in Tarantool
вот как раз оно и тормозит
думал, может есть какой более быстрый способ
источник

ОБ

Олег Бабин in Tarantool
А можете код test.lua показать?
источник