用于灵活地将数据导出到数据库的包。

resilient-exporters的Python项目详细描述


有弹性的出口商

PyPIGitHub Build StatusLicensePython Version

当从应用程序发送或保存数据时,弹性导出程序会抽象出常见任务。它的设计目的是将数据发送到不同的目标,并管理运行在边缘设备(如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管理数据到目标的导出,但是每个目标都需要特定的逻辑来发送数据。所有这些子类,例如FileExporterMongoDBExporter,都实现了Exporter.send方法并管理所需的选项。一些出口商可能需要额外的软件包才能使用:

  • pymongo用于MongoDBExporter
  • elasticsearch用于ElasticSearchExporter

文件

更多可用文档here.

建议和贡献

请为错误或功能请求打开GitHub问题。 联系投稿人参与。在

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

推荐PyPI第三方库


热门话题
java如何在href中将struts2文本字段的值作为参数传递?   java检查对象属性是否为空的最佳方法是什么?   java通过Maven使用Junit类别运行Cucumber测试   java如何在selenium Webdriver(Mac)中使用Robot类上传多个文件?   如何用python绘制图形或将python转换为java和Matlab?   java Osgi捆绑包更新和ResourceBundle   java使用流api将流<@Nullable T>转换为流<@NonNull T>   java中EXCEL的平台无关连接字符串   JavaFX中的java表   java Jetty线程池和sun。HttpServer会话   JPA存储库bean的java Spring注入无法工作NullPointerException   java从另一个Kubernetes作业触发Kubernetes   我的java netbeans抽奖计划需要帮助吗   泛型中的java有界类型无法扩展另一个有界类型   如果混合使用全局构建和概要文件构建,java cxfcodegenplugin会生成错误代码   封装SQL平台之间差异的java策略?