用于灵活地将数据导出到数据库的包。
resilient-exporters的Python项目详细描述
有弹性的出口商
当从应用程序发送或保存数据时,弹性导出程序会抽象出常见任务。它的设计目的是将数据发送到不同的目标,并管理运行在边缘设备(如Raspberry Pi或Nvidia Jetson Nano)上的应用程序的常见问题:
- 互联网连接中断
- 数据传输频率高
如果连接丢失,它会自动保存数据,并在恢复连接和发出新的发送数据请求时重试。为了避免消耗太多内存或磁盘空间,它有一个特定的可配置刷新。在
如果一个应用程序想要发送比目前可管理的更多的数据,它会将传输作业(如果可用,使用多线程)成倍增加并保存数据(排队),以避免背压并降低应用程序的速度。在
当然,如果:
- 要传输的数据几乎总是比可用带宽更重要
- 与可用内存或磁盘空间相比,中断太长
我们专门为运行Linux发行版的Raspberry Pi3B+设备设计了它。在
安装
要使用软件包:
pip install resilient-exporters
Dev安装
如果您想要文件的可编辑的最新版本,请执行以下操作:
^{pr2}$使用
当前支持:
- 文本文件
- 蒙古达
- 弹性搜索
某些导出程序的某些功能可能会丢失。在Github上提出问题,请求实现并帮助改进包。在
存储在文件
fromresilient_exportersimportFileExporterexporter=FileExporter(target_file="mydata.txt",max_lines=1000,keep_new_data=True)mydata=["value1","value2"]exporter.send(mydata)
至MongoDB
fromresilient_exportersimportMongoDBExporterexporter=MongoDBExporter(target_ip="127.0.0.1",target_port=27017,username="username",password="password",default_db="my_db",default_collection="my_collection")mydata={"field1":"value1"}exporter.send(mydata)
到ElasticSearch
fromresilient_exportersimportElasticSearchExporterexporter=ElasticSearchExporter(target_ip="127.0.0.1",default_index="my_index",use_ssl=True,ssl_certfile="/path/to/file",sniff_on_start=True)mydata={"field1":"value1"}exporter.send(mydata)
多个远程目标-池
由于resilient-exporters
,边缘设备越来越强大,能够管理多个远程目标而无需太多开销。如果要利用这一点,有时可能需要跨同一类型的不同数据库(例如NoSQL、基于文档的数据库)复制数据。但是,如果使用多个导出器,则所有功能都将重复,并可能导致效率低下(多个临时文件、多个队列等)。在
相反,请使用resilient_exporters.ExporterPool
,它将导出器和其他池集中起来,为所有导出器只公开一个send
方法,以确保更有效地管理资源。要使用它:
fromresilient_exportersimportExporterPoolfromresilient_exportersimportMongoDBExporter,ElasticSearchExporterexporters=[MongoDBExporter(target_ip="127.0.1.10",target_port=1234,default_db="my_db",default_collection="my_collection"),ElasticSearchExporter(cloud_id="cloud id",api_key="api key",default_index="my_index")]pool=ExporterPool(exporters,use_memory=False)mydata={"metric":2}pool.send(mydata)
发送前转换数据
要在导出器或池发送数据之前转换数据,可以添加一个接受输入数据并返回转换数据的函数:
fromresilient_exportersimportMongoDBExporterdeftransform(data):data["metric"]=(data["metric"]/2)*.5returndataexporter=MongoDBExporter(target_ip="127.0.1.10",target_port=1234,default_db="my_db",default_collection="my_collection",transform=transform)mydata={"metric":2}exporter.send(mydata)
NOTE: it can also be passed to a pool with the same key argument
tranform
at initialisation. When doing so, transform functions of individual exporters will be superseded by the pool's transform function.
附加信息
resilient_exporters.Exporter
是软件包的核心。所有其他出口商都继承了它。在
Exporter
管理数据到目标的导出,但是每个目标都需要特定的逻辑来发送数据。所有这些子类,例如FileExporter
或MongoDBExporter
,都实现了Exporter.send
方法并管理所需的选项。一些出口商可能需要额外的软件包才能使用:
pymongo
用于MongoDBExporter
elasticsearch
用于ElasticSearchExporter
文件
更多可用文档here.
建议和贡献
请为错误或功能请求打开GitHub问题。 联系投稿人参与。在
- 项目
标签: