Хранить необработанные двоичные значения в Apache Ignite через тонкий клиент Python - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь сохранить некоторые необработанные двоичные данные в Apache Ignite с помощью тонкого клиента Python, и процесс идет очень медленно (на самом деле похоже, что это зависит от размера данных).

Для моего простого тестового примера я начал локально Ignite с одного узла (версия 2.7.0 без какой-либо конкретной конфигурации):

$ bin/ignite.sh 

Кроме того, у меня есть бинарный файл с содержимым, которое я хочу сохранить в Ignite. Размер, если около 6 МБ. Вот мой исходный код:

with open("/var/bin_text.bin", mode='rb') as file:
    file_content = file.read()

client = Client()
client.connect('127.0.0.1', 10800)
my_cache = client.get_or_create_cache('my cache')
my_cache.put("key_bin", file_content)

После my_cache.put процесс просто зависает. Мне даже не удалось дождаться конца (я прекратил его через 2 минуты).

Однако передача содержимого файла, преобразованного в строку, работает очень быстро.

my_cache.put("key_str", str(file_content))

Что мне не хватает?

Обновление

Я поиграл с размером данных, которые я хочу поместить в Ignite, используя подход, предложенный @ jock-tanner. Вот что у меня есть:

size: 1024, elapsed time: 0.0045130252838134766 secs
size: 2048, elapsed time: 0.007149457931518555 secs
size: 4096, elapsed time: 0.004557132720947266 secs
size: 8192, elapsed time: 0.010631561279296875 secs
size: 16384, elapsed time: 0.025577783584594727 secs
size: 32768, elapsed time: 0.07686495780944824 secs
size: 65536, elapsed time: 0.2685544490814209 secs
size: 131072, elapsed time: 0.8761806488037109 secs
size: 262144, elapsed time: 3.121284246444702 secs
size: 524288, elapsed time: 12.343520879745483 secs
size: 1048576, elapsed time: 53.10914897918701 secs
size: 2097152, elapsed time: 205.68292760849 secs

Требуется более 3 минут, чтобы поместить 2 МБ данных в локально установленный Ignite. Может ли это быть моей проблемой конфигурации Ignite?

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Согласно информации, полученной от @ jock-tanner, это похоже на дефект тонкого клиента Python.Соответствующий билет JIRA создан - https://issues.apache.org/jira/browse/IGNITE-11854.

0 голосов
/ 14 мая 2019

Извините, но вы просто не можете хранить двоичные данные в Ignite так, как вы пытаетесь это сделать в первом примере.Вам следует преобразовать его либо в строку Unicode, если это возможно (как вы делали во втором примере), либо в последовательность байтов:

cache1.put('key', [ord(x) for x in file_content], value_hint=ByteArrayObject)

В отличие от ключей и значений Redis, которые являются просто двоичными строками, ключи Igniteи значения на самом деле набраны.В pyignite я изо всех сил пытался скрыть этот факт за семантикой get / put, удобной для ввода, но все еще показывает.

Вы можете узнать о типах данных Ignite и о том, как их использовать, в следующих документах:

Обратите внимание, что система ввода в Ignite основана на Java, поэтому в целом нет документов по типам данных Ignite.

...