таких iproto-операций как insert, update, replace, etc. Сам протокол возвращает тапл в IPROTO_DATA, где значения полей доступны только по индексу. Меня интересует, конвертит ли его кто-нибудь перед отдачей в мапу в случае, когда у спейса задан формат и мы можем сопоставить имена полей индексам? Это может быть удобно для пользователя, но может потребовать лишнего запроса к серверу (если схема еще не запрашивалась). То есть что-то типа:
space_wo_format:insert({1, 'foo'})
---
- [1, 'foo']
vs
space_w_format:insert({1, 'foo'})
---
- {id: 1, name: 'foo'}
```
```
Я в Perl-коннекторе на коннекте читаю схему и таплы всегда конверчу в мапу по схеме
Коннектор для перла не поддерживается вроде. Когда-то я пробовал его, но понял что заброшено. И юзал на петоне
А я не про официальный. У меня свой
а это поведение отключаемо? например, если пользователь работает со спейсами через id и ему не важно, что там вернет insert(), вычитываение схемы тогда будет избыточной операцией. Я тоже склоняюсь к варианту отдавать в ответ мапу если задана схема, но хочется дать возможность легко это отключать для конкретного вызова. Поэтому думаю над апи для всего этого - можно передавать опциональный параметр при вызове метода (insert(tuple, as_map=true)), можно возвращать объект который будет сам себя конвертировать (insert(tuple).toMap()), можно иметь несколько методов (insertAndReturnTuple, insertAndReturnMap). Как я понимаю, в твоем коннекторе всегда будет мап?
я в своем коннекторе всегда конверчу к ассоциативным массивам мало того, если call возвращает выборку из спейса, то у call есть опция что он возвращает данные из спейса и тогда тоже проводится преобразование
я думаю это отключение несёт ноль смысла
А в какой момент времени вычитывается схема в вашем коннекторе при таком запросе (псевдокод): conn = connect() res = conn.getSpaceById(513).insert(tuple) ?
Сразу после установления соединения, до того, как клиенту говорится, что соединение установлено
> res = conn.getSpaceById(513).insert(tuple) мне не нравится такой подход, хотя многие его применяют. мне нравится так: res = conn.insert(space_name, tuple) res = conn.insert(space_number, tuple)
В asynctnt например возвращаются спец объекты к которым можно обращаться как по индексам так и по именам полей спейса если задан формат Вычитывание схемы отключаемо на уровне соединения
вот и я думал про такие спец объекты. С ними вычитывание схемы можно сделать ленивым, если пользователь не использует имена то и схема не будет запрашиваться. С другой стороны, может я переусложняю все и это никому не нужно в реальности и стоит просто всегда вычитывать схему
Схему один раз при подключении и (опционально) когда она поменяется вычитать несложно, в памяти много места она не занимает. Юзерские схемы для запросов -- другой вопрос, я бы здесь использовал формат авро
Обсуждают сегодня