弹性搜索的持久序列发生器

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用多个参数的枚举   从Oracle到Redis的java复制表   java如何保护tomcat服务器中的db用户名和密码。xml   java如何使用注册密钥保护移动应用程序?   java在什么情况下超类不应该是抽象的?   java Backspace键在macOS上的Scala REPL中不起作用   arduino Java+Uno+RFID:调用方法读取Java中的RFID   带有where语句中集合的java JPA查询   java如何向基于Tyrus注释的客户端添加请求头   java对我的二进制搜索算法的反馈   java重新访问数据库时文件的内容不正确   用户在字符串中输入值后退出While循环(Java)   java如何在Maven中的多个项目之间共享项目依赖关系?   java Close从未在数据库上被明确调用   在java中从文件读入布尔矩阵   Java:如何使用父节点将XML流拆分为小型XML文档。VTDXML