このトピックでは、リアルタイム電子フェンスコンピューティングのための GanosBase の実装について説明します。この位置情報ベースのソリューションは、交通安全、緊急事態管理、マーケティングプロモーションで一般的に使用される仮想地理境界を作成します。Realtime Compute for Apache Flink および PolarDB と統合された GanosBase は、空間コンピューティングとデータ分析を効率的に実行し、ジオフェンスアプリケーションの適時性と精度を大幅に向上させることができます。
電子フェンスについて
電子フェンスは、物理的なものではなく、ポリゴンまたはポリラインで定義された仮想の地理的境界です。アプリケーションまたはデバイスが GPS、RFID、Wi-Fi、またはセルラーデータを使用する場合、この境界に出入りすると特定のアクションがトリガーされます。これらの仮想境界は、建物やモールなどの小規模なエリアから、都市や国などのより大きな地域まで、さまざまな地理的な場所に設定できます。

シナリオ
電子フェンスは、さまざまな現実のコンテキストで適用されます。
交通と物流
交通および物流業界では、電子フェンスは車両の状態を監視するのに役立ちます。車両が指定されたルートから外れたときにシステムに警告したり、死角での車両の出会いに関する通知とサービスを提供したりできます。
飛行禁止/運転禁止区域の管理
飛行禁止区域を設定することにより、ドローンは空港周辺の特定の範囲内を飛行することが制限されます。ドローンがこのエリアに入ると、電子フェンスは航空安全インシデントを防ぐために警告を発します。
緊急事態
台風や竜巻などの悪天候時には、車両や船舶が影響を受けるエリアに入ると、電子フェンスが作動して警告を発します。
マーケティングシナリオ
販売業者は、電子フェンスを設定して、顧客が入場した際にクーポン配布などのマーケティング活動を自動的に送信し、マーケティング効率を高めることができます。
電子フェンスのその他の用途には、IoT セキュリティ、法執行、ホームオートメーション、動物追跡、資産管理、人事セキュリティ管理などがあります。全体的に、リアルタイム電子フェンス技術は、企業や開発者が地理空間データを効果的に管理し、効率性と精度の点で位置情報ベースの意思決定を改善するための強力なツールです。
IoT セキュリティ: 監視対象の子供または高齢者が事前に定義されたジオフェンスを離れると、システムはアラームをトリガーして、迷子になるのを防ぎます。
法執行機関: 監視対象者が許可なく住居を出た場合、デバイスは適切な当局に通知します。
ホームオートメーションまたはスマートホーム: 家主のスマートフォンが家のジオフェンス範囲に入ると、サーモスタットがプリセット温度に自動的に調整されたり、ライトが自動的に点灯したりすることがあります。
動物追跡: ペットの飼い主や農家は、動物が設定された境界を越えて移動した場合にアラームをトリガーするジオフェンスを作成し、動物の動きをリアルタイムで追跡できます。
資産管理: ネットワーク管理者は、会社のデバイスが指定されたエリアを出たときにアラートを設定し、デバイスの位置を監視し、泥棒などによる不正使用から保護できます。
人事セキュリティ管理: 従業員が制限されたジオフェンスエリアにアクセスしようとすると、スマートカードはセキュリティ部門にアラートを発します。
要約すると、リアルタイム電子フェンス技術は、企業や開発者に地理空間データをより適切に管理および活用するための堅牢なツールを提供し、位置情報ベースの意思決定の効率性と精度を向上させます。
ベストプラクティス
GanosBase は、リアルタイム電子フェンスと Realtime Compute for Apache Flink を組み合わせ、Flink エンジンに空間コンピューティング機能とメモリ空間インデックスを追加して、効率的でリアルタイムの電子フェンス計算を実現します。データソースには、Kafka など、Flink でサポートされているものが含まれます。電子フェンステーブルは PolarDB に事前に保存され、定期的に更新されます。一方、電子フェンス操作の結果は PolarDB に書き戻されます。
準備
Realtime Compute for Apache Flink プロダクトを利用するには、Realtime Compute コンソール にログインし、Realtime Compute for Apache Flink インスタンスを購入します。詳細な手順については、「Realtime Compute for Apache Flink をアクティブ化する」をご参照ください。
Realtime Compute for Apache Flink ワークスペースが PolarDB データベースにアクセスできるようにするには、Realtime Compute for Apache Flink [リージョン] と [仮想プライベートクラウド (VPC)] が PolarDB クラスタと一致し、Realtime Compute for Apache Flink ワークスペースの CIDR ブロックアドレスを PolarDB クラスタホワイトリストに追加してください。詳細については、「クラスタホワイトリストを設定する」をご参照ください。
空間コンピューティング関数を登録する
GanosBase 空間コンピューティング関数を Realtime Compute for Apache Flink ワークスペースにアップロードします。Realtime Compute for Apache Flink は関連する関数を自動的に登録し、左側の関数リストに表示します。空間コンピューティング関数を入手するには、お問い合わせください。Realtime Compute for Apache Flink ワークスペースへのアップロードの詳細な手順については、「ユーザー定義関数 (UDF) を管理する」をご参照ください。
電子フェンステーブル
電子フェンステーブルは、駐車禁止区域や運転禁止区域など、事前に定義された電子フェンスのセットであり、データは PolarDB にジオメトリオブジェクトとして保存されます。
電子フェンステーブルを生成する
PolarDB に 10,000 個のランダムなポリゴン電子フェンスを生成します。この方法では、10,000 個のランダムなポイントを作成し、これらのポイントを中心とした半径 0.01 のバッファを生成します。
-- ランダムな浮動小数点数を生成する
CREATE OR REPLACE FUNCTION test_random_float(low float, high float)
RETURNS float AS $$
BEGIN
RETURN random() * (high-low) + low;
END;
$$ LANGUAGE 'plpgsql' STRICT;
-- ランダムなポイントを生成する
CREATE OR REPLACE FUNCTION test_random_geogpoint(lowx float, highx float,
lowy float, highy float)
RETURNS geometry AS $$
BEGIN
RETURN st_setsrid(st_point(test_random_float(lowx, highx), test_random_float(lowy, highy)),4326);
END;
$$ LANGUAGE 'plpgsql' STRICT;
-- 電子フェンステーブル
CREATE TABLE IF NOT EXISTS geofencings (
name VARCHAR(100) PRIMARY KEY,
geofencing Geometry
);
-- 10,000 個のランダムな電子フェンスを挿入する
INSERT INTO geofencings SELECT 'g_' || s, test_random_geogpoint(129, 130, 49, 50) FROM generate_series(1, 10000) s;
-- 半径約 1 km のバッファを生成する
Update geofencings set geofencing = st_buffer(geofencing, 0.01);Flink ディメンションテーブルとして登録する
Flink SQL で、PolarDB 内の電子フェンステーブルを Realtime Compute for Apache Flink のディメンションテーブルとして登録します。電子フェンス情報は、PolarDB の geofencings テーブルから取得されます。Flink の構文に従って、結合操作に CONTAINS 述語を使用します。
CREATE TEMPORARY TABLE geofencings (
name STRING NOT NULL,
geofencing STRING NOT NULL,
PRIMARY KEY (name) NOT ENFORCED
) WITH (
'connector' = 'polardb',
'jdbcUrl' = 'jdbc:postgresql://<yourHostname>:<yourPort>/<dbname>',
'username' = '<yourUserName>',
'password' = '<yourPassWord>',
'query' = 'SELECT name, ST_AsText(geofencing) FROM geofencings;',
'join.columnName' = 'geofencing',
'join.predicate' = 'CONTAINS'
);計算結果
リアルタイム電子フェンス計算の結果も PolarDB に保存されます。
計算結果テーブル
電子フェンスの条件を満たすポイントの ID、フェンス名、およびポイントの座標情報を記録するために、PolarDB にテーブルを作成します。
CREATE TABLE IF NOT EXISTS point_in_geofencing (
id serial PRIMARY KEY, -- プライマリキー
point_id VARCHAR(100), -- ポイント ID
geofencing_name VARCHAR(100), -- フェンス名
point Geometry -- ポイント
);Flink テーブルとして登録する
Flink SQL で、PolarDB の結果テーブルを Flink の結果テーブルとして登録します。次に、SQL を使用してクエリ結果を PolarDB に書き込みます。
CREATE TEMPORARY TABLE point_in_geofencing (
point_id STRING NOT NULL,
geofencing_name STRING NOT NULL,
point STRING NOT NULL
) WITH (
'connector' = 'polardb',
'jdbcUrl' = 'jdbc:postgresql://<yourHostname>:<yourPort>/<dbname>',
'username' = '<yourUserName>',
'password' = '<yourPassWord>',
'query' = 'INSERT INTO point_in_geofencing(point_id,geofencing_name,point) values(?,?,ST_GeomFromText(?));',
'batchSize' = '100' -- バッチごとに 100 レコードを挿入する
);計算ソースをシミュレートする
次の Flink SQL は、datagen を使用してデータソーテーブルをシミュレートし、ランダムに生成された ID、経度、緯度、およびタイムスタンプを含む 1 秒あたり 100,000 レコードを生成します。
CREATE TEMPORARY TABLE points (
id STRING not null,
lng DOUBLE not null, -- 経度
lat DOUBLE not null, -- 緯度
proctime AS PROCTIME(), -- タイムスタンプ
PRIMARY KEY (id) NOT ENFORCED
) WITH (
'connector' = 'datagen',
'rows-per-second' = '100000',
'fields.lng.kind' = 'random',
'fields.lng.min' = '129',
'fields.lng.max' = '130',
'fields.lat.kind' = 'random',
'fields.lat.min' = '49',
'fields.lat.max' = '50',
'fields.id.kind' = 'random',
'fields.id.length' = '5'
);電子フェンス計算
Flink SQL で結合操作を実行します。テーブルを定義するときに結合の述語を CONTAINS に設定します。これにより、geofencings.geofencing CONTAINS ST_MakePoint(lng,lat) 条件が実行され、結果が PolarDB の point_in_geofencing テーブルに書き込まれます。
INSERT INTO point_in_geofencing
SELECT points.id, geofencings.name, ST_MakePoint(lng,lat)
FROM points
JOIN geofencings FOR SYSTEM_TIME AS OF points.proctime
ON geofencings.geofencing = ST_MakePoint(lng,lat);計算パフォーマンス
監視データによると、データベース書き込み TPS は約 300 回/秒で、1 秒あたり 30,000 レコードに相当します。2 コア 4 GB メモリの PolarDB エンタープライズエディションクラスタの場合、CPU 使用率は約 10% で、追加の負荷に対応できることを示しています。
まとめ
従来のミドルウェアまたはビジネスコードの実装と比較して、GanosBase は、リアルタイムコンピューティングレイヤーで大規模なモバイルオブジェクト向けの標準化された時空間処理フレームワークを提供し、コンピューティングの効率と費用対効果の大幅な向上を実現します。今後、GanosBase は、モバイルオブジェクトのリアルタイムコンピューティング分析機能を強化し続け、空間情報アプリケーションのオンラインプラットフォームへの包括的な移行を促進します。
トライアル体験
または PolarDB 無料トライアル ページにアクセスして、「クラウドネイティブデータベース PolarDB PostgreSQL エディション」トライアルを選択し、GanosBase のリアルタイム時空間コンピューティング機能をご確認ください。