一个用于跟踪数据库中表格历史记录的 command-line/API 工具,它是否存在,或者我应该去开发一个吗?
A command-line/API tool for tracking history of tables in a database, does it exist or should I go and develop one?
我目前正在做一个需要进行数据库同步的项目。我们在服务器上有一个主数据库,上面有一个 webapp 来与数据交互。但由于这些数据是地理数据(复杂的多边形和一些点),用户在处理多边形时拥有本地数据库(我们使用 QGIS),然后上传服务器中的更改更方便、更高效。但是当一个用户在本地工作时,有可能在服务器上修改了一些点(只能与服务器上的点交互)。这就是为什么我需要同步数据库的能力。
在本地数据库和服务器数据库上具有点的 INSERT、UPDATE 和 DELETE 历史应该足以重建点的历史然后同步。
顺便说一句,我们本地数据库使用Spatialite,服务器主数据库使用PostGIS
我找到了大量关于如何使用数据库触发器执行此操作的资源:
http://database-programmer.blogspot.com/2008/07/history-tables.html
How to Store Historical Data
...
但是我找不到任何工具或库来执行此操作而无需手动编写触发器。对于我的需要,我绝对可以手动完成,但我觉得使用专用 command-line/API 工具也可以使它变得更容易、更方便。例如,该工具会为用户想要跟踪历史的表生成历史表和触发器,我们还可以想象不同的选项,例如:
- 我们要跟踪哪些列?
- 我们是只想跟踪操作还是值?
- ...
总而言之,我的问题是:
- 有没有现成的工具可以做到这一点?我搜索了一无所获。
- 您认为实施这样的工具会 feasible/relevant 吗?我正在考虑在 Python 中执行此操作(因为我的项目是 Django 驱动的),启用不同的后端(现在我需要 SQLite/Spatialite 和 PostgreSQL/PostGIS)...
感谢您的回答,
昏暗'
正如 Wander 所暗示的,这并不像 "Having an history of INSERT, UPDATE and DELETE" 和保持它们同步那么简单。引擎盖下发生了很多事情。有很多用于复制/镜像的 DBMS 工具。这是 PostreSQL 的一个示例:pgpool.
感谢 Wander Nauta 和 David G 的回答,我完全同意执行同步 通常 并不像这样简单。我应该提供更多细节,但就我而言,我认为这就足够了,因为:
- 本地数据始终是服务器数据的子集,每个用户都分配了一个子集。所以总是只有一个人在给定的子集上离线工作。
- 在服务器上,用户只能modify/delete他们创建的数据。
为了提供有关上下文的更多信息,每个用户都根据航拍图像对一个地区的一个区域进行本地数字化。每个用户都被分配到一个区域进行数字化,并且能够将他的作品上传到服务器上。在服务器上,通过一个webapp,用户可以查阅大家的作品,post个问题点并进行评论,主要是指出数字化上的疑惑或疏漏。我想要的是用户可以用同事加的点下载一份自己在做的区,本地解决问题,删点,最后添加新的疑惑再上传。
本地数据库和服务器数据库之间并没有真正的master/slave关系,每个数据库都有特定的作用。因此,我不确定 replication/mirroring 是否能满足我的需求,但也许我错了?另外,我想避免使用满足需求的过于复杂的解决方案,并避免添加太多新的依赖项,因为需求不会有太大变化。
查看 GeoGig. GeoGig can track and synchronize geodata from various sources, i.e Postgis, Esri shapefile and spatialite. It implements the typical Git 工作流程,但要看数据。您将在服务器上拥有一个数据存储库,可以从本地工作站克隆、拉取和推送该数据存储库。
GeoGit 是一个年轻的项目,仍处于测试阶段,但已经很强大且功能丰富,能够合并不同的提交、创建差异、切换分支、跟踪历史和所有其他典型的 Git 任务。
典型 GeoGig 工作流程示例:
Geogig 有一个舒适的命令行界面:
# on http://server, initialize and start the remote repository on port 8182 (defaut)
geogig init
geogig serve
# on local, clone the remore repository to your machine
geogig clone http://server:8182 your_repository
cd your_repository/
# on local, import in geogig the data you are working on (Postgis)
geogig pg import --schema public --database your_database --user your_user --password your_pass --table your_table
# on local, add the local changes
geogig add
# on local, commit your changes
geogig commit -m "First commit"
# on local, push to the remote repository
geogig push
您可以请 bucardo 来完成多主机同步方面的繁重工作。看看 https://bucardo.org/wiki/Bucardo
他们承诺他们甚至可以在不同类型的数据库之间进行同步,例如。 postgresql <-> sqlite, http://blog.endpoint.com/2015/08/bucardo-postgres-replication-pgbench.html
虽然我不确定特殊的地理空间功能(仅同步区域)。
Geogig 绝对值得一试。您可以将 Geogig 存储库直接插入 GeoServer 以服务 WMS 并通过 Web/WFS.
编辑功能
我目前正在做一个需要进行数据库同步的项目。我们在服务器上有一个主数据库,上面有一个 webapp 来与数据交互。但由于这些数据是地理数据(复杂的多边形和一些点),用户在处理多边形时拥有本地数据库(我们使用 QGIS),然后上传服务器中的更改更方便、更高效。但是当一个用户在本地工作时,有可能在服务器上修改了一些点(只能与服务器上的点交互)。这就是为什么我需要同步数据库的能力。
在本地数据库和服务器数据库上具有点的 INSERT、UPDATE 和 DELETE 历史应该足以重建点的历史然后同步。
顺便说一句,我们本地数据库使用Spatialite,服务器主数据库使用PostGIS
我找到了大量关于如何使用数据库触发器执行此操作的资源:
http://database-programmer.blogspot.com/2008/07/history-tables.html
How to Store Historical Data
...
但是我找不到任何工具或库来执行此操作而无需手动编写触发器。对于我的需要,我绝对可以手动完成,但我觉得使用专用 command-line/API 工具也可以使它变得更容易、更方便。例如,该工具会为用户想要跟踪历史的表生成历史表和触发器,我们还可以想象不同的选项,例如:
- 我们要跟踪哪些列?
- 我们是只想跟踪操作还是值?
- ...
总而言之,我的问题是:
- 有没有现成的工具可以做到这一点?我搜索了一无所获。
- 您认为实施这样的工具会 feasible/relevant 吗?我正在考虑在 Python 中执行此操作(因为我的项目是 Django 驱动的),启用不同的后端(现在我需要 SQLite/Spatialite 和 PostgreSQL/PostGIS)...
感谢您的回答,
昏暗'
正如 Wander 所暗示的,这并不像 "Having an history of INSERT, UPDATE and DELETE" 和保持它们同步那么简单。引擎盖下发生了很多事情。有很多用于复制/镜像的 DBMS 工具。这是 PostreSQL 的一个示例:pgpool.
感谢 Wander Nauta 和 David G 的回答,我完全同意执行同步 通常 并不像这样简单。我应该提供更多细节,但就我而言,我认为这就足够了,因为:
- 本地数据始终是服务器数据的子集,每个用户都分配了一个子集。所以总是只有一个人在给定的子集上离线工作。
- 在服务器上,用户只能modify/delete他们创建的数据。
为了提供有关上下文的更多信息,每个用户都根据航拍图像对一个地区的一个区域进行本地数字化。每个用户都被分配到一个区域进行数字化,并且能够将他的作品上传到服务器上。在服务器上,通过一个webapp,用户可以查阅大家的作品,post个问题点并进行评论,主要是指出数字化上的疑惑或疏漏。我想要的是用户可以用同事加的点下载一份自己在做的区,本地解决问题,删点,最后添加新的疑惑再上传。
本地数据库和服务器数据库之间并没有真正的master/slave关系,每个数据库都有特定的作用。因此,我不确定 replication/mirroring 是否能满足我的需求,但也许我错了?另外,我想避免使用满足需求的过于复杂的解决方案,并避免添加太多新的依赖项,因为需求不会有太大变化。
查看 GeoGig. GeoGig can track and synchronize geodata from various sources, i.e Postgis, Esri shapefile and spatialite. It implements the typical Git 工作流程,但要看数据。您将在服务器上拥有一个数据存储库,可以从本地工作站克隆、拉取和推送该数据存储库。
GeoGit 是一个年轻的项目,仍处于测试阶段,但已经很强大且功能丰富,能够合并不同的提交、创建差异、切换分支、跟踪历史和所有其他典型的 Git 任务。
典型 GeoGig 工作流程示例:
Geogig 有一个舒适的命令行界面:
# on http://server, initialize and start the remote repository on port 8182 (defaut)
geogig init
geogig serve
# on local, clone the remore repository to your machine
geogig clone http://server:8182 your_repository
cd your_repository/
# on local, import in geogig the data you are working on (Postgis)
geogig pg import --schema public --database your_database --user your_user --password your_pass --table your_table
# on local, add the local changes
geogig add
# on local, commit your changes
geogig commit -m "First commit"
# on local, push to the remote repository
geogig push
您可以请 bucardo 来完成多主机同步方面的繁重工作。看看 https://bucardo.org/wiki/Bucardo 他们承诺他们甚至可以在不同类型的数据库之间进行同步,例如。 postgresql <-> sqlite, http://blog.endpoint.com/2015/08/bucardo-postgres-replication-pgbench.html
虽然我不确定特殊的地理空间功能(仅同步区域)。
Geogig 绝对值得一试。您可以将 Geogig 存储库直接插入 GeoServer 以服务 WMS 并通过 Web/WFS.
编辑功能