使用 PostgreSQL 和 meilisync 同步数据库
虽然 Meilisearch 是一个数据库,但不建议将其用作主要数据存储。相反,您应该使用外部数据库存储您的数据,并定期将其与 Meilisearch 同步。
本指南将教您如何使用 meilisync
使 Meilisearch 与 PostgreSQL 数据库保持同步。请注意,meilisync 仍处于早期开发阶段,尚未准备好投入生产。您在与它交互时可能会遇到问题。
要求
- 一个命令行控制台,例如 macOS 的终端或 Windows 的 Cygwin
- 一个填充了数据的 PostgreSQL 数据库
- 一个 Meilisearch 实例,可以是自托管的,也可以是通过 Meilisearch Cloud 获得的
安装 meilisync
将 meilisync
安装到与您的主要数据库相同的位置。您可以手动进行或使用 Docker
Docker
首先,在您的 Docker 项目目录中创建一个 docker-compose.yml
文件。使用文本编辑器打开它并添加以下内容
services:
meilisync:
platform: linux/x86_64
image: long2ice/meilisync
volumes:
- ./config.yml:/meilisync/config.yml
如果您的项目已经有一个 docker-compose.yml
,请将 meilisync
设置添加到现有的 services
字段中。
完成后,打开您的控制台,导航到您的 Docker 项目目录,并运行以下命令
docker compose pull
几秒钟后,Docker 会通知您已成功拉取 meilisync
的镜像。
将 meilisync
连接到 Meilisearch
安装 meilisync
后,您现在需要将其连接到您的 Meilisearch 实例。
在您的项目目录中创建一个 config.yml
文件。使用文本编辑器打开它,并根据您是否使用 Docker 添加以下配置选项
meilisearch:
api_url: http://host.docker.internal:7700/
api_key: 'MEILISEARCH_API_KEY'
insert_size: 1000
insert_interval: 10
将 MEILISEARCH_API_KEY
替换为能够创建、更新和删除文档和索引的 API 密钥。将 MEILISEARCH_API_URL
替换为您实例的 API URL。如果您使用的是 Meilisearch Cloud,此 URL 应类似于以下内容:https://ms-4d85L33tC0d3-5041.fra.meilisearch.io
。
配置 PostgreSQL
将 meilisync
连接到 Meilisearch 后,您需要将其连接到您的 PostgreSQL 数据库。
启用逻辑复制
要将 meilisync
与 PostgreSQL 一起使用,您需要启用 wal2json
扩展。
wal2json
扩展需要 预写日志设置 设置为 logical
。
这可以通过将以下行添加到您的 PostgreSQL 服务器的 postgresql.conf
文件中来完成
wal_level = logical
#
# these parameters only need to set in versions 9.4, 9.5 and 9.6
# default values are ok in version 10 or later
#
max_replication_slots = 10
max_wal_senders = 10
或者,通过在您的 PostgreSQL 服务器控制台中运行以下命令来在运行时设置二进制日志格式
ALTER SYSTEM SET wal_level = logical;
这将需要服务器配置重新加载才能生效。有关此内容的更多信息,请阅读 ALTER SYSTEM
文档。
连接 meilisync
和 PostgreSQL
再次打开 meilisync
的 config.yml
,并将以下设置追加到文件底部
source:
type: postgres
host: 127.0.0.1 # assuming your PostgreSQL server is running on the same machine as `meilisync`
port: 5432
database: POSTGRESQL_DATABASE_NAME
user: POSTGRESQL_USERNAME
password: POSTGRESQL_PASSWORD
将 POSTGRESQL_DATABASE_NAME、POSTGRESQL_USERNAME 和 POSTGRESQL_PASSWORD 分别替换为您的数据库名称、具有该数据库读取权限的用户以及其凭据。
配置 meilisync
最后一步配置是指定数据库中的哪些表应该同步到哪些 Meilisearch 索引。
打开 config.yml
并将以下设置追加到文件底部
sync:
- table: POSTGRES_TABLE_NAME_1
index: MEILISEARCH_INDEX_NAME_1
pk: id # Read the "Primary key inference" section below
full: true
- table: POSTGRES_TABLE_NAME_2
index: MEILISEARCH_INDEX_NAME_2
full: true
将 POSTGRES_TABLE_NAME_1
和 MEILISEARCH_INDEX_NAME_1
分别替换为您的表和索引名称。如以上示例所示,您可以同步多个表。
主键推断
如果您的表中包含多个名称中包含 id
的列,meilisync
将无法推断出哪个列是主键。在这种情况下,您必须通过在表的配置中添加 pk
字段来手动指定主键。
自定义 meilisync
本教程描述了一个相当基本的 meilisync
设置。有关更多自定义选项,请查阅 meilisync
的文档。
运行 meilisync
配置完成后,再次打开您的命令行提示符并使用 Docker 或手动安装运行 meilisync
docker compose up
meilisync
应该立即开始将您的主 PostgreSQL 数据库与您的 Meilisearch 实例同步。
meilisync
完成后,请使用 Meilisearch 的搜索预览进行一些测试搜索,并确认数据已成功同步到您的主数据库和 Meilisearch 之间。
结论
恭喜!您已成功设置 meilisync
。
您可以将此进程永久运行在后台,这样对主数据库的所有更改都会自动同步,也可以中断此进程,仅在您再次更新数据库时运行。