【发布时间】:2021-08-25 05:05:06
【问题描述】:
我需要将任何东西从 SQL Server 迁移到 MongoDB。
SQL Server 不断插入、更新、删除数据,我想将这些数据移动到 MongoDB。
示例触发器:
BEGIN
BEGIN TRY
BEGIN TRAN
DECLARE @tableName VARCHAR(50) = 'AutoPushData_OK'
DECLARE @event_type varchar(42)
IF EXISTS(SELECT * FROM inserted)
IF EXISTS(SELECT * FROM deleted)
SELECT @event_type = 'update'
ELSE
SELECT @event_type = 'insert'
ELSE
IF EXISTS(SELECT * FROM deleted)
SELECT @event_type = 'delete'
ELSE
SELECT @event_type = 'unknown'
IF @event_type ='insert' or @event_type = 'update'
BEGIN
INSERT INTO ReplicationData.dbo.MigrateData (JsonData, TableName, CRUD)
SELECT
(SELECT * FROM inserted FOR JSON AUTO),
@tableName, @event_type
END
ELSE IF @event_type = 'delete'
BEGIN
INSERT INTO ReplicationData.dbo.MigrateData (JsonData, TableName, CRUD)
SELECT
(SELECT * FROM deleted FOR JSON AUTO),
@tableName, @event_type
END
COMMIT TRAN
END TRY
BEGIN CATCH
DECLARE @ErrorMsg VARCHAR(MAX),
@ErrorNumber INT,
@ErrorProc sysname,
@ErrorLine INT
SELECT
@ErrorMsg = ERROR_MESSAGE(),
@ErrorNumber = ERROR_NUMBER(),
@ErrorProc = ERROR_PROCEDURE(),
@ErrorLine = ERROR_LINE();
ROLLBACK TRAN;
INSERT INTO ErrorLog (ErrorMsg, ErrorNumber, ErrorProc, ErrorLine)
VALUES (@ErrorMsg, @ErrorNumber, @ErrorProc, @ErrorLine)
END CATCH
END
我会将表 AutoPushData_OK 的所有更改插入到 dbo.MigrateData 并使用服务将数据从 dbo.MigrateData 插入到 MongoDB。
问题:我这样做有什么危险吗?
有没有更好的办法?
谢谢
【问题讨论】:
-
有点见仁见智。你的 json 在同一个“CRUD”blob 中包含多行,你还好吗?您是否考虑过对原始应用程序性能的影响?如果答案是“是”和“是”,那么可以肯定,这将起作用。 SymmetricDS 工具使用这种方法。如果担心对原始系统性能的影响,您可能希望将 SQL 更改数据捕获视为行源,但这确实会增加复杂性。
-
我不知道你的要求,但你为什么不使用Temporal Table?
-
我不认为有任何真正的“危险”,但很好奇,您打算如何确保 Mongo 中的数据与 SQL 中的数据一致?我假设您使用 dbo.MigrateData 作为队列,并在处理后从中清除记录。如果是这种情况,我将在表中包含更多元数据,例如 ID,也许还有时间戳,因此如果 Mongo 端出现故障,则有一种解决方法。也许是软删除,每 10 天左右清除一次。我不知道你的要求的细节,但我想我会提供这个。
标签: sql-server mongodb triggers