すべてのプロダクト
Search
ドキュメントセンター

PolarDB:頂点テーブルと軌道テーブル間のデータの同期

最終更新日:Jul 02, 2024

ほとんどのビジネスシナリオでは、データは軌道点の形式で書き込まれます。 しかしながら、これらの軌道点は、データ分析を実行するために必要とされる軌道に集約されなければならない。

次のメソッドを使用して、軌道ポイントを軌道に集約できます。

  • 手動同期: 頂点テーブルに新しく挿入された軌道ポイントを軌道テーブルに手動で同期する必要があります。 この方法は、リアルタイムデータ同期をサポートしていません。

  • 自動同期: トリガは、軌道点が頂点テーブルに挿入されたときに、軌道点を軌道テーブルに自動的に同期させるために使用される。 この方法は、リアルタイムデータ同期をサポートします。 しかし、頂点テーブルの書き込み性能は低下する。

手動同期用のサンプルSQL文:

説明

手動同期を使用する場合は、頂点テーブルに列を追加して、軌道点が軌道テーブルに同期されているかどうかを示す必要があります。

-- Add a column to the vertex table to indicate whether a trajectory point is synchronized to the trajectory table and create an index.
ALTER TABLE sample_points ADD COLUMN sync bool DEFAULT false;
CREATE INDEX ON sample_points USING btree(sync);

-- Create a UDF to synchronize the trajectory points that are not synchronized to the trajectory table.
CREATE OR REPLACE FUNCTION trajectory_cast_append()
RETURNS void
AS $$
BEGIN
INSERT INTO trajectory_table
SELECT userid, ST_Sort(ST_MakeTrajectory(pnts.tjraw, true, '{"intensity"}'::cstring[]))
FROM
(SELECT sample_points.userid, array_agg(ROW(sample_points.sample_time,     sample_points.x, sample_points.y, sample_points.z, sample_points.intensity)) as tjraw FROM sample_points WHERE sync = false GROUP BY userid) pnts
ON CONFLICT(userid) DO UPDATE
  SET traj = ST_Append(trajectory_table.traj, excluded.traj);
UPDATE sample_points
SET sync = true WHERE sync = false;
END;
$$ LANGUAGE plpgsql STRICT PARALLEL SAFE;

-- Run the synchronization task.
SELECT trajectory_cast_append();

自動同期のサンプルSQL文:

-- Create a trigger.
CREATE OR REPLACE FUNCTION trajectory_sync_point() RETURNS TRIGGER AS $$
BEGIN
INSERT INTO trajectory_table
SELECT NEW.userid, ST_MakeTrajectory(array_agg(ROW(NEW.sample_time, NEW.x, NEW.y, NEW.z, NEW.intensity)), true, '{"intensity"}'::cstring[])
ON CONFLICT(userid) DO UPDATE
  SET traj = ST_Append(trajectory_table.traj, excluded.traj);
RETURN NULL;
END;
$$
LANGUAGE plpgsql STRICT PARALLEL SAFE;

-- Configure the trigger to synchronize data.
CREATE TRIGGER point_trigger AFTER INSERT ON sample_points
    FOR EACH ROW EXECUTE PROCEDURE trajectory_sync_point();