热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PostgreSQL与Elasticsearch和PGSync的实时数据集成Tolu

PGSync是一个变更数据捕获工具,用于将数据从Postgres转移到Elasticsearch。它允许你保留Postgres作为你的真实来源,并在Elasticsearch中公开



PGSync是一个变更数据捕获工具,用于将数据从Postgres转移到Elasticsearch。它允许你保留Postgres作为你的真实来源,并在Elasticsearch中公开结构化的非规范化文档。
这对于构建后端服务以驱动文本搜索应用或构建实时仪表盘应用非常有用。
对嵌套实体的改变会传播到Elasticsearch。
PGSync的高级查询生成器会根据你的模式生成SQL查询。
只需用JSON描述你的模式,PGSync就会持续捕捉你的数据变化,并将其加载到Elasticsearch中。
PGSync提供了一个自我管理的变化数据捕获解决方案。
 

原有问题
在高层次上,你在Postgres数据库中拥有数据,你想在Elasticsearch中展示它。这意味着你的数据的每一个变化都需要被复制到Elasticsearch中。

起初,这似乎很容易,然后就不容易了。只需添加一些代码,在更新数据库后将数据复制到Elasticsearch,或者在你的应用层面上执行所谓的双重写入。编写跨越多个表和涉及多个关系的SQL查询可能不是件容易的事。检测嵌套文件中的变化也可能相当困难。
当然,如果你的数据从未发生过变化,那么你可以直接拍下时间快照,然后将其加载到Elasticsearch中。请记住,你不应该真的把你的主要数据存储在Elasticsearch中。
Elasticsearch更适合作为一个次要的非规范化搜索引擎,与传统的规范化数据存储一起使用。

其中一个挑战是在合理的时间范围内将数据从真实源中取出并放入二级存储。
现有的工具,如Apaches的Kafka、Amazons的Kinesis或Elastics的Logstash需要相当多的工程和专业知识。

如何解决问题
PGSync利用PostgreSQL 9.4中引入的Postgres的逻辑解码功能来捕获连续的变化事件流。

PGSync的查询生成器能够根据你的模式动态地建立高级关系查询。

只需在Elasticsearch中定义一个描述数据结构的模式(JSON),引导数据库并启动PGSync守护程序。

它同时运行一个轮询和一个事件驱动的模型,以捕获到日期的变化,并通知在某个时间点发生的变化。最初的同步会轮询数据库自上一次迭代以来的变化,此后对数据库的变化恢复到事件通知(基于触发器并由pg-notify处理)。

不需要用诸如 "updated_at"、"timestamp "或 "status "等字段来污染你的数据库,以检测和跟踪行级变化。
 
PGSync降低了大多数应用程序堆栈的复杂性。


  •     Postgres是你的读/写事实来源,而Elasticsearch是你的只读搜索层。
  •     你有不断变化的数据。
  •     你在现有的关系型数据库(如Postgres)中拥有数据,你需要一个辅助的NoSQL数据库,如Elasticsearch,用于基于文本或自动完成查询。
  •     你想避免其他工具所规定的开发开销和复杂性。

 
安装需要:
Prerequisites: Python 3.6+, Redis 3.1.0+, Elasticsearch 5.0+, PostgreSQL 9.4+.
Install PGSync from PyPi.

$ pip install pgsync
$ pgsync --config --daemon



 源码:Github repository.
 


推荐阅读
  • 这篇文章将为大家详细讲解有关python爬虫中scrapy怎么处理项目数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有 ... [详细]
  • mysql oneproxy稳定吗_Mysql 中间件 oneProxy总结
    建议使用之前把官方的文档全部通读一遍这里提供一个我的网盘地址oneproxy百度网盘0.先对oneproxy有个大概的了解,知道他所处的位置1.MySQL服务器创建t ... [详细]
  • 如何理解MyBatis动态SQL
    本篇内容主要讲解“如何理解MyBatis动态SQL”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解M ... [详细]
  • 我有二进制格式的数据(十六进制:803bc8870a89),我需要将其转换为字符串,以便通过Jackcess在MSAccess数据库中保存二进制数据.我知道,我不认为在Java中使用 ... [详细]
  • docker整体了解
    Docker是一个基于LXC技术构建的容器引擎,基于Go语言开发,遵循Apache2.0协议开源Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移 ... [详细]
  • js Blob对象实现文件下载功能
    2019独角兽企业重金招聘Python工程师标准jsBlob对象实现文件下载功能,可以将字符串放到文件夹里,提供下载功能。下载功能$(#down ... [详细]
  • Postman工具使用教程
    Postman的基础功能1.GET请求GET请求:点击Params,输入参数及value,可输入多个,即时显示在URL链接上,所以,GET请求的请求头与请求参数如在接口文档中无特别 ... [详细]
  • day3作业:  2.登陆时,从文件里面取账号和密码,判断用户是否存在,输入为空的也需要检验importjsonall_us ... [详细]
  • 记录工作和学习中遇到和使用过的Python库。Target四个Level整理Collect学习Learn练习Practice掌握Master1.Python原生和功能增强1.1py ... [详细]
  • 本博客是本人的一些小结,如有纰漏,欢迎拍砖。首先若是想做大项目的话,不要觉的框架写着没有用,而不写,先把框架写好,以后有需要的时候才可以填充这个框架,项目才可以做大。 ... [详细]
  • Elasticsearch简单使用系列安装
    2019独角兽企业重金招聘Python工程师标准1.elasticsearch支持的操作系统和JVM版本https:www.elastic.cosupportmatrix2. ... [详细]
  • 我的LINUX学习之路之二十一之web服务器简单搭建
    今天说说如何搭建HTTP服务器!目的:使用“多IP地址”方法实现多个网站。使用“主机头名”方法实现多个网站。使用“多端口”方法实现多个网站。这回用图形界 ... [详细]
  • 关于初学PHP时的知识积累总结【PHP】
    后端开发|php教程PHP,知识积累后端开发-php教程PHP基础A、初识PHPPHP是与HTML混合使用的嵌入式语言。1、PHP标记默认标记短标记,需在php.ini中将shor ... [详细]
  • Day17_16_SpringCloud教程之Feign高级功能详解
    Feign高级功能详解注意:本篇Feign的高级功能实现请参考上一篇博客.Feign的高级功能实现以上一篇博客代码为基础,我们主要修改service_feign_consume ... [详细]
  • SpringBoot 整合 ShardingJDBC(mysql8.0)(简单入门含gitee源码)
    SpringBoot整合Sharding-JDBC(mysql-8.0)感谢​我也是从网上的资源查找后进行学习的,所以该项目仅适用与个人学习,不建议使用于生产项目。​这里感谢如下: ... [详细]
author-avatar
手浪用户2602928711
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有