弹性搜索的持久序列发生器
lovely.essequence的Python项目详细描述
使用ElasticSearch创建大量ID的整数ID序列生成器。 ElasticSearch无法为新创建的文档创建整数ID。这个 包有助于在分布式系统中创建唯一的整数id。
功能
- 确保多个进程能够创建唯一的ID
- 通过使用单个ElasticSearch请求请求多个ID进行优化
弹性搜索设置
注意
在ElasticSearch中启用动态脚本非常重要。 将此添加到您的yaml配置文件:
script.disable_dynamic: false
序列必须分配给ElasticSearch客户端实例:
>>> from elasticsearch import Elasticsearch >>> es_client = Elasticsearch(['localhost:%s' % crate_port])
将客户机全局分配给应用程序中的所有序列 可以分配给类属性es:
>>> from lovely.essequence import Sequence >>> Sequence.ES = es_client
用法
有一个序列类:
>>> from lovely.essequence import Sequence
它必须用序列名实例化:
>>> s1 = Sequence('s1')
现在可以请求IID:
>>> s1.next() 1 >>> s1.next() 2
相同序列名的多个序列实例使用相同的块:
>>> s2 = Sequence('s1', bulk_size=100) >>> s2.next() 3
在使用了大容量之后,下一个大容量的请求是 在next方法中透明处理: 使用来自s1的所有缓存id:
>>> for i in range(10): s1.next() 4 5 6 7 8 9 10 11 12 13
可以使用多个独立的序列:
>>> other = Sequence('other') >>> other.next() 1
转换提供的IID
可以提供转换函数来转换提供的整数 在调用next时将值转换为其他值:
>>> asstring = Sequence('other', transform=str) >>> isinstance(asstring.next(), str) True >>> def transformer(iid): ... return {'iid': iid} >>> Sequence('other', transform=transformer).next() {'iid': 3}
重置序列
出于测试目的,可以重置序列。
注意
如果多个进程使用 同样的顺序。这只是测试用的。
>>> s1 = Sequence('reset') >>> s2 = Sequence('reset') >>> s1.next() 1 >>> s2.next() 2
>>> from lovely.essequence.sequence import testing_reset_sequences >>> testing_reset_sequences()
>>> s2.next() 1 >>> s1.next() 2