215 похожих чатов

Вопрос к авторам коннекторов, в каком виде вы возвращаете результаты

таких 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'}
```

```

12 ответов

9 просмотров

Я в Perl-коннекторе на коннекте читаю схему и таплы всегда конверчу в мапу по схеме

Mons Anderson
Я в Perl-коннекторе на коннекте читаю схему и тапл...

Коннектор для перла не поддерживается вроде. Когда-то я пробовал его, но понял что заброшено. И юзал на петоне

Eugene-Leonovich Автор вопроса

а это поведение отключаемо? например, если пользователь работает со спейсами через id и ему не важно, что там вернет insert(), вычитываение схемы тогда будет избыточной операцией. Я тоже склоняюсь к варианту отдавать в ответ мапу если задана схема, но хочется дать возможность легко это отключать для конкретного вызова. Поэтому думаю над апи для всего этого - можно передавать опциональный параметр при вызове метода (insert(tuple, as_map=true)), можно возвращать объект который будет сам себя конвертировать (insert(tuple).toMap()), можно иметь несколько методов (insertAndReturnTuple, insertAndReturnMap). Как я понимаю, в твоем коннекторе всегда будет мап?

я в своем коннекторе всегда конверчу к ассоциативным массивам мало того, если call возвращает выборку из спейса, то у call есть опция что он возвращает данные из спейса и тогда тоже проводится преобразование

Eugene-Leonovich Автор вопроса

А в какой момент времени вычитывается схема в вашем коннекторе при таком запросе (псевдокод): conn = connect() res = conn.getSpaceById(513).insert(tuple) ?

Eugene Leonovich
А в какой момент времени вычитывается схема в ваше...

Сразу после установления соединения, до того, как клиенту говорится, что соединение установлено

Eugene Leonovich
А в какой момент времени вычитывается схема в ваше...

> res = conn.getSpaceById(513).insert(tuple) мне не нравится такой подход, хотя многие его применяют. мне нравится так: res = conn.insert(space_name, tuple) res = conn.insert(space_number, tuple)

Eugene Leonovich
а это поведение отключаемо? например, если пользов...

В asynctnt например возвращаются спец объекты к которым можно обращаться как по индексам так и по именам полей спейса если задан формат Вычитывание схемы отключаемо на уровне соединения

Eugene-Leonovich Автор вопроса
Igor Latkin
В asynctnt например возвращаются спец объекты к ко...

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

Eugene Leonovich
вот и я думал про такие спец объекты. С ними вычит...

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

Похожие вопросы

Обсуждают сегодня

Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
А дальше что?.. Записать в файл, потом в Код?.. И потом разбирать как-то?..
Хаскель Моисеевич Гопник
14
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
А чем вам питонисты не угодили?😂
.
79
доброго времени. db, dw и прочие исполняются при трансляции или при выполнении программы?
lutayyy
10
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Есть предложения, как подобное можно упростить?
Hemul GM
12
@y0zhig @shizzard А можно я опишу цель и может вообще ерланг мне не подходит. На текущий момент как я понимаю у ерланга есть легковесные потоки и задача выполняется в каком т...
Дмитрий Спиридонов
5
У меня вопросик назрел. Почему, создав класс без наследования и реализации деструктора Destroy, деструктор не вызывался при free. Потом указал наследование от tobject и overri...
Сергей Бычков
9
Карта сайта