我正在尝试使用瘦Python客户端将一些原始二进制数据保存到Apache Ignite中,并且该过程非常缓慢(实际上,它看起来取决于数据的大小)。
对于我的简单测试用例,我已经在本地使用单个节点(版本2.7.0,没有任何特定配置)启动Ignite:
$ bin/ignite.sh
此外,我还有一个二进制文件,其中包含要存储在Ignite中的内容。大小大约为6MB。 这是我的源代码:
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))
我缺少什么?
更新
我一直在尝试使用@ jock-tanner提出的方法来处理要放入Ignite的数据大小。这是我所拥有的:
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
将2MB数据放入本地安装的Ignite需要3分钟以上。可能是我的Ignite配置问题吗?
答案 0 :(得分:0)
对不起,但是您无法以第一个示例中的方式在Ignite中存储二进制数据。您应该尽可能将其转换为Unicode字符串(如您在第二个示例中所做的那样),或者将其转换为字节序列:
cache1.put('key', [ord(x) for x in file_content], value_hint=ByteArrayObject)
不同于Redis键和值(只是二进制字符串),实际上会键入Ignite键和值。在pyignite
中,我尽力将这一事实隐藏在鸭子友好型的get / put语义后面,但它仍在显示。
您可以在以下文档中了解Ignite数据类型以及如何使用它们:
请注意,Ignite类型系统是基于Java的,这就是为什么在Ignite数据类型上通常没有文档的原因。
答案 1 :(得分:0)
根据从@ jock-tanner收到的信息,这似乎是Python瘦客户端上的缺陷。相应的JIRA票证已创建-https://issues.apache.org/jira/browse/IGNITE-11854。