Size: a a a

2020 November 11

ИЛ

Илья Лебедев... in Tarantool
ну то есть это скорее в сторону "сторадж грузит проц, роутер грузит проц, зачем держать их вместе"?
источник

S

Sid in Tarantool
Anton Melnikov
Доброго времени суток, друзья! Рад представить вам обертку для C API Tarantool'а на Rust.
Сейчас из функционала доступно:
- Box: spaces, indexes, sequences
- Fibers: fiber attributes, conditional variables
- CoIO
- Transactions
- Latches
- Tuple utils
- Logging (совместимо с https://docs.rs/log/0.4.11/log/)
- Error handling
Актуальная версия 0.2.1

Подробнее по ссылкам:
- https://github.com/picodata/tarantool-module
- https://crates.io/crates/tarantool-module
- https://docs.rs/tarantool-module/0.2.1/tarantool_module/

Буду очень рад фидбеку. По вопросам, связанным с библиотекой, можно обращаться ко мне (@volt_0), @kostja_osipov или @VifleY.
Т.е. можно писать код на rust без луа?
источник

NM

Nikita Makarov in Tarantool
Доброй ночи, такая проблема: json.decode конвертит doubl'ы в int'ы.
Подскажите, пожалуйста, как его отучить? Что-то в документации не нашел подобного...
источник

MA

Mons Anderson in Tarantool
Nikita Makarov
Доброй ночи, такая проблема: json.decode конвертит doubl'ы в int'ы.
Подскажите, пожалуйста, как его отучить? Что-то в документации не нашел подобного...
А можно пример?
источник

NM

Nikita Makarov in Tarantool
Да, конечно, луа-код выглядит вот так:
local json = require('json')

local function dump(o)
   if type(o) == 'table' then
       local s = '{ '
       for k,v in pairs(o) do
           if type(k) ~= 'number' then k = '"'..k..'"' end
           s = s .. '['..k..'] = ' .. dump(v) .. ','
       end
       return s .. '} '
   else
       return tostring(o)
   end
end

local function insert(raw_json)
   local entity = json.decode(raw_json)
   log.info('dumping as raw json: ' .. dump(raw_json))
   log.info('dumping as map: ' .. dump(entity))

   entity.bucket_id = shard2bucket(entity.mdm_customer_id)
   local func_name = sharded_space_func(space_name, 'insert')
   local func_args = { entity }
   return call_rw_func(entity.mdm_customer_id, func_name, func_args)
end
источник

NM

Nikita Makarov in Tarantool
В entity уже int'ы, на входе (raw_json) корректный json с doubl'ами
источник

MA

Mons Anderson in Tarantool
А можете привести пример json?
источник

NM

Nikita Makarov in Tarantool
Да, конечно:
{"mdm_customer_id":"mdmCustomerId22121331231231232","offer_id":"offerId","product_sub_id":"productSubId","variant_no":10,"variant_nm":"variantNm","commission_annual_amt":100.0,"max_limit_amt":1000.0,"opercash_rate":10.0,"operpos_rate":10.0,"processed_dttm":1605050483912}


Дампинг с лога:
2020-11-11 02:05:13.563 [367736] main/131/main I> dump of offer as json: {"mdm_customer_id":"mdmCustomerId22121331231231232","offer_id":"offerId","product_sub_id":"productSubId","variant_no":10,"variant_nm":"variantNm","commission_annual_amt":100.0,"max_limit_amt":1000.0,"opercash_rate":10.0,"operpos_rate":10.0,"processed_dttm":1605049506543}
2020-11-11 02:05:13.564 [367736] main/131/main I> dump of offer as map: { ["product_sub_id"] = productSubId,["commission_annual_amt"] = 100,["variant_nm"] = variantNm,["opercash_rate"] = 10,["processed_dttm"] = 1605049506543,["max_limit_amt"] = 1000,["offer_id"] = offerId,["operpos_rate"] = 10,["mdm_customer_id"] = mdmCustomerId22121331231231232,["variant_no"] = 10,}
источник

ИЛ

Илья Лебедев... in Tarantool
а никто тут не замерял скорость синхронных операций из коннектора?
источник

ИЛ

Илья Лебедев... in Tarantool
именно по одной, не батчем
источник

AT

Alexander Turenko in Tarantool
Сергей
Вобще насколько помню он ругался что не может cmake найти
Зафайлите, пожалуйста, issue в tarantool/docker.
источник

AT

Alexander Turenko in Tarantool
@avtikhon @tsafin Заведем теги 1.10.3-centos7 и 1.10.8-centos 7 и двинем тег 1.x-centos7?
источник

AT

Alexander Turenko in Tarantool
Nikita Makarov
Доброй ночи, такая проблема: json.decode конвертит doubl'ы в int'ы.
Подскажите, пожалуйста, как его отучить? Что-то в документации не нашел подобного...
Любопытно. Стандартный хак, который работает для msgpack, не катит для json: json.encode(ffi.cast('double', 1)). Фиксится просто, но не стрипает незначащие нули; вероятно, влияет на что-то еще и, возможно, должно быть под опцией.

diff --git a/src/lib/core/util.c b/src/lib/core/util.c
index dfce317f0..fa30f45e7 100644
--- a/src/lib/core/util.c
+++ b/src/lib/core/util.c
@@ -330,8 +330,8 @@ json_escape(char *buf, int size, const char *data)
}

const char *precision_fmts[] = {
-       "%.0lg", "%.1lg", "%.2lg", "%.3lg", "%.4lg", "%.5lg", "%.6lg", "%.7lg",
-       "%.8lg", "%.9lg", "%.10lg", "%.11lg", "%.12lg", "%.13lg", "%.14lg"
+       "%.0lf", "%.1lf", "%.2lf", "%.3lf", "%.4lf", "%.5lf", "%.6lf", "%.7lf",
+       "%.8lf", "%.9lf", "%.10lf", "%.11lf", "%.12lf", "%.13lf", "%.14lf"
};

void
источник

AT

Alexander Tikhonov in Tarantool
Alexander Turenko
@avtikhon @tsafin Заведем теги 1.10.3-centos7 и 1.10.8-centos 7 и двинем тег 1.x-centos7?
Да пора
источник

AM

Anton Melnikov in Tarantool
Nick Karlov
еще, кажется, у вас нет очень важной штуки — поддержки итераторов (на моей памяти все хранимки на си писались как раз с целью работы с итераторами без луа и ГЦ)
так есть же итераторы: например методы Space::select и Index::select возвращают итератор
источник

AM

Anton Melnikov in Tarantool
Sid
Т.е. можно писать код на rust без луа?
пока обойтись совсем без lua не получится(например нет поддержки работы со схемой), но это одна из приоритетных целей проекта
источник

TS

Timur Safin in Tarantool
Alexander Turenko
@avtikhon @tsafin Заведем теги 1.10.3-centos7 и 1.10.8-centos 7 и двинем тег 1.x-centos7?
Да, надо бы
источник

AT

Alexander Turenko in Tarantool
Alexander Turenko
@avtikhon @tsafin Заведем теги 1.10.3-centos7 и 1.10.8-centos 7 и двинем тег 1.x-centos7?
Кстати, заметил сейчас, что теги 1.x-centos7 и 2.x-centos7 — актуальные (1.10.8-1-ge69e130, 2.5.2-0-g05730d3). Так что, пожалуй, надо бы просто завести 1.10.8-centos7, 2.5.2-centos7.
источник

AT

Alexander Turenko in Tarantool
источник

N

Nikolay in Tarantool
Всем привет. Уже не знаю куда написать, возможно тут мне смогут помочь...
Пишу на GO. Использую https://github.com/tarantool/go-tarantool .

// User Model
type User struct {
 ID      *uint64          json:"id" binding:"required"
 TelegramId  int64           json:"telegram_id" binding:"required"
 Email       string           json:"email" binding:"required"
 Password  string           json:"password" binding:"required"
 Settings    string          json:"settings" binding:"required"
}

//SELECT
var users models.User
err = conn.CallAsync("box.execute", []interface{}{"SELECT * FROM USERS WHERE ID=11"}).GetTyped(&users)
 if err != nil {
   fmt.Println(err)
 }
fmt.Println(users.String())

Не может произойти декодирование в структуру. Может я делаю что-то не так? Подскажите пожалуйста.
Результат выдаваемый:
msgpack: invalid code 91 decoding uint64
{0xc0001a6e70 0   }

Убираю из структуры ID, результат:
msgpack: invalid code 91 decoding int64
{0   }

Обязательно использование SQL потому что LUA игнорирует FK, заранее спасибо!
источник