用于编排多个缓存层的缓存抽象层

datapipelines的Python项目详细描述


数据管道收集、存储和处理数据。这个包提供了一个促进这一进程的框架。

数据从DataSources收集,存储在DataSinks中,并使用Transformers进行处理。

DataSources向管道提供数据的实体。示例包括数据库、内存缓存和restapi。

DataSinks存储由DataSources提供的数据的实体。例如数据库和内存缓存。几乎所有的数据接收器都将是数据源,因为如果无法获取数据,存储数据通常是没有帮助的。我们将既是数据源又是数据接收器的实体称为data store

Transformers转换或将数据从一种数据类型处理到另一种数据类型的实体。例如,转换器可以将word文档转换为pdf。

DataPipeline由通过Transformers通信的DataStoresDataSinks列表组成。

数据源和接收器在数据管道中排序,它们的顺序决定了请求数据的顺序。一般来说,较慢的数据存储/接收器应该在管道的末端。

并非每个数据接收器或数据存储都需要支持每个数据类型。如果数据接收器/存储不支持请求的数据类型,则该数据接收器/源将在管道中被跳过。

示例

例如,如果数据管道由内存缓存、数据库和rest api服务(按此顺序)组成,则在执行查询时,DataPipeline将首先在内存缓存中查找,然后在数据库中查找,然后在restapi中查找。如果在缓存中找到数据,则会返回该数据,并且不会查询数据库和rest api。同样,如果在数据库中找到数据,则不会查询rest api。

在数据源中找到数据后,数据会沿数据管道向下传播。沿途遇到的任何数据接收器都将存储该数据。因此,继续上面的示例,如果查询是由rest api提供的,那么返回的数据将存储在数据库中,然后存储在缓存中。数据接收器将只存储它支持的数据。

每个数据接收器可以为其支持的每种类型的数据定义过期时间,但这取决于要实现的特定数据接收器。

用法

下面的代码是一个简单的代码,用于演示如何将从SQL数据库请求的Word文档转换为PDF文档的示例。

请注意,数据库中没有存储pdf文档,但如果需要,数据管道仍然可以返回一个文档。

# The four classes below implement a simple DataPipeline. The code would need to be filled in by the user.classWordDoc:...classPDF:...classSQLDatabase(DataSource,DataSink):@get.register(WordDoc)# Tells the DataPipeline that this SQL database can provide a WordDocdefget_word_doc(query:Dict[str,Any])->WordDoc:"""Returns a WordDoc from an SQL database based on the `filename` in the query."""@put.register(WordDoc)# Tell the DataPipeline that this SQL database can store a WordDocdefput_word_doc(doc:WordDoc,query:Dict[str,Any]):"""Stores the document in the SQL database using the query as an identifier."""classDocumentTransformer(Transformer):@transform.register(WordDoc,PDF)# Tells the DataPipeline that we know how to convert a WordDoc to a PDFdefWord_to_PDF(doc:WordDoc)->PDF:"""Converts a WordDoc to a PDF and returns the PDF."""# The line of code below can now be used to request a PDF.# The WordDoc with the filename `find_me` will be pulled from the SQL database then converted to a PDF and returned to the user.my_pdf=pipeline.get(PDF,query={"filename":"find_me"})# Note also that because we implemented a `put(WordDoc)` method in the SQLDatabase that it will also store WordDocs that pass through the SQL database via the pipeline but are not already in the database.

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

推荐PyPI第三方库


热门话题
html如何在JavaScript中获取当前Windows用户的名称   用于屏蔽电子邮件的java正则表达式   java Jsoup Android解析   为了避免在运行时缺少Java泛型,将超类型绑定到子类实例   java JTextArea。setText(空);不会释放内存   安卓源Java OutOfMemoryError在构建AOSP 10时出错   java打印到达数组末尾所需的最小跳数序列   使用mvn命令的java Selenium TestNG并行执行   javasocket编程:在关闭服务器之前通知所有客户端   java如何在加载新的安卓片段时显示progressbar?   java从actor系统中删除AKKA actor,并创建另一个具有相同路径名的actor   java我可以用浓缩咖啡做性能测试,还是应该用其他东西?   JavaTreeView(TreeItem)是否可以获取层次结构索引?   带远程服务的java Android应用程序