Проблемы с PHP extension и int64

Bug #1216985 reported by Денис Кузнецов
12
This bug affects 2 people
Affects Status Importance Assigned to Milestone
tarantool
Confirmed
Medium
Roman Tsisyk

Bug Description

Привет,

у нас есть space с int64 в качестве ключа. Вот конфигурация спейса:
space[0].enabled = 1
space[0].index[0].type = "TREE"
space[0].index[0].unique = 1
space[0].index[0].key_field[0].fieldno = 0
space[0].index[0].key_field[0].type = "NUM64"
space[0].index[1].type = "HASH"
space[0].index[1].unique = 1
space[0].index[1].key_field[0].fieldno = 1
space[0].index[1].key_field[0].type = "NUM"
space[0].index[2].type = "HASH"
space[0].index[2].unique = 1
space[0].index[2].key_field[0].fieldno = 2
space[0].index[2].key_field[0].type = "STR"

При попытке сделать select по этому ключу, высыпается exception:
<?php
$t = new Tarantool('127.0.0.1', 13013)
var_dump($t->select(0, 0, 1));

PHP Fatal error: Uncaught exception 'Exception' with message 'select failed: 514(0x00000202): Illegal parameters, key is not u64' in <filename>

Хотя сборка php 64bit, и все инты в ней по умолчанию int64.

Tarantool - 1.4.9
Extension - 1.0

*** Странно, почему система дает мне писать в чужой пост а в свой наоборот нет. Боже, что тут происходит )
Пользуясь случаем, хочу дополнить багрепорт.

Дело даже не в PHP, все гораздо глобальнее:
localhost> insert into t0 values (1, 5)
Insert ERROR, Supplied key field type does not match index type: expected NUM64 (ER_KEY_FIELD_TYPE)
Я против вас конечно "писюн газированный", но судя по исходникам модуля который генерит эту ошибку, NUM64 был профукан, либо возможно изначально существовал только в процедурах. *** - etalot

Kostja Osipov (kostja)
Changed in tarantool:
importance: Undecided → Medium
assignee: nobody → Roman Tsisyk (rtsisyk)
Revision history for this message
Anatoliy Skorobogatiy (etalot) wrote :

Тоже самое.

Версия 1.5.1-85.x86_64 от 9 сентября 2013
Забавно то, что присматриваю tarantool для игры в ОК(DAU несколько сотен k). А в ОК ID пользователей за пределами Int32, плюс я их еще делаю чуть длиннее.

description: updated
Revision history for this message
Kostja Osipov (kostja) wrote :

Конкретно эта проблема исправлена в 1.5.1
Обновитесь пожалуйста, а также попробуйте обновить драйвер.
Получить данные вы сможете, а вот вставить - всё равно по-прежнему нет.
Ключ 8-байтный можно также передать как бинарную строку из 8 байт.
В любом случае, обновитесь и отпишитесь мне пожалуйста о результатах.
И да, мы постепенно переезжаем на github, так что тикеты имеет смысл ставить там.

Revision history for this message
Anatoliy Skorobogatiy (etalot) wrote :

Здесь можно общаться на великом и могучем!

Ковыряю Вашего паучка дня два, вот что установлено:
[root@matrix ~]# yum list installed | grep tarantool
tarantool.x86_64 1.5.1-85 @tarantool
tarantool-client.x86_64 1.5.1-85 @tarantool
tarantool-dev.x86_64 1.5.1-85 @tarantool

В моих простых php скриптах-заливках из txt он оказался быстрее, чем redis.
Но это даже не главное(хотя конечно очень приятно), slab'ы и расход памяти меньше чем у redis вот в чем сок. В режиме memcached slab'ы у tarantool меньше чуть ли не в два раза против оригинального memcached. Плюс простота структуры данных tarantool. Мне это все нравится.
Хотелось бы NUM64. А может плюнуть и сжимать crc32. Но как-то это не по душе. О коллизиях думать не хочу, хоть и вероятность не большая. Скорее это мой бзик.
Память сервера занята практически под завязку, размазывать на другие пока не хочу. А мне сейчас нужно реализовать новую задачу, под которую с нормальной незажирающейся базой нужно не более 500Мб оперативы. Наскребу.
Касательно msgpack в новом 1.6.х, допустим ключ NUM64, значение просто целое, slab'ы по размеру в msgpack будут те же? Если больше, то насколько?

Revision history for this message
Kostja Osipov (kostja) wrote :

Сложно сказать однозначно, но в целом msgpack даже ещё более компактный для чисел чем текущий формат, т.к. он пакует числа в зависимости от значения.

PHP драйвер надо дописывать для NUM64 сейчас он кривой. Можете ещё писать нам в рассылку, tarantool-ru at googlegroups.com, или заходите в skype chat.

Revision history for this message
Anatoliy Skorobogatiy (etalot) wrote :

Спасибо.

Kostja Osipov (kostja)
Changed in tarantool:
status: New → Confirmed
Revision history for this message
Anatoliy Skorobogatiy (etalot) wrote :

Подскажите пожалуйста Skype чат.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.