пачка get запросов по известным ключам? и если второе, то надо ли заворачивать в транзакцию
1. У селекта по индексу и гета одинаковая сложность. У селекта не по индексу сложность выше (фулскан). 2. Если вы просто делаете селект, зачем транзакция? Транзакции нужны для модификации данных.
в случае уникального индекса select не отличается от get в случае неуникального индекса — select может возвращать несколько записей, get не работает т.о. для работы с уникальными индексами рекомендуется использовать get, т.к. он даёт 100% предсказуемый результат — 1 тапл для неуникальных индексов с select нужно быть аккуратным (может неожиданно вернуть много данных, если не указать лимит. ну и не пользоваться offset, т.к. сложность O(N)). лучше использовать pairs вместо select как сказал Алексей — транзакции нужны для модификации: они меняют поведение yield'ящих операций, таких как insert/update/replace/... В случае винила всё совсем по другому, и надеюсь, что у вас не винил :)
ну тут ситуация, когда точно известно, какие именно записи вернет селект, и есть их primary ключи. поэтому встал выбор, забирать их селектом или пачкой гетов по одной. А что с винилом ужасного?)
в случае уникального ключа select так же, как и get, вернёт ровно 1 ключ
с точки зрения доступа к данным -- да, с точки зрения интерфейса не совсем: tarantool> #box.space.test:select({nil}) --- - 100 ... tarantool> #box.space.test:get({nil}) --- - error: Invalid key part count in an exact match (expected 1, got 0) ... можно случайно передать nil из-за ошибки в приложении, тогда выгоднее использовать именно get, потому что он рейзит ошибку вместо фуллскана
Обсуждают сегодня