本プロジェクトでは、国内ファンド(貨幣ファンド)の純資産額や収益をリアルタイムに表示する必要があり、折れ線グラフ表示の機能を満たした上で、統計ランキングやページング表示などの機能を追加する必要があります。最も包括的なリアルタイムのクエリ サービスをユーザーに提供します。Sohu Fund チームが以前使用していた MySQL データベースには、大量のデータに直面する際に容量のボトルネックがあったため、TDengineに基づく新しいソリューションを試すことにしました。
選択の背景
TDengine を使用する前は、MySQL データベースを使用していました。
購入したデータソースからのファンドデータは、2万件の国内ファンドや数十年(1990年代から現在まで)にわたる数千万行の広範なデータを含めてすべて混在しているため、MySQLを通じて保存されている場合、これらのデータについては、まず各ファンドのデータをテーブルに分割する必要があり、ある程度の手間がかかるため、まずはすべてのデータを1つのテーブルに保存することにしました。
ただし、このような大規模なテーブルはクエリのパフォーマンスが非常に低下します。この問題に対処するために、私たちはオフライン クエリを通じて毎日のファンド データ画像を生成し、ユーザーに返します。カスタマイズされたクエリ サービスはまだ外部に提供していません。
同時に、上記のような経験を経て、従来のリレーショナル データベースが大量のデータに対処する能力のボトルネックにも疑問を感じています。このとき、TDengine を知りました。そのコアは時系列データベースであり、その「1 デバイス、1 テーブル」という特別な設計は、私たちが行っている「1 ファンド、1 テーブル」のサブテーブルの仕事と一致しています。そこで、TDengine に基づく新しいソリューションを試すことにしました。
使用経験
徹底した調査とテストの結果、次のことがわかりました。
「スーパーテーブル」の存在によりデータモデリングが非常に明確になり、「スーパーテーブル」を核としてほぼすべてのクエリを単純なSQLで完了させることができます。
また、「テーブル自動作成」という特殊機能により、検証なしで直接テーブルを作成できるため、分割テーブルの作成と各ファンドのデータの書き込みが簡単に完了します。
TDengine にアクセスするための事前準備は非常にスムーズだったと言えます。
TDengine クラスターをセットアップするために 3 台の 4C 16GB サーバーを使用しました。
データベース作成ステートメントは次のとおりです。
なお、ファンドデータは1日1件であり、頻度の低いデータです。この種のデータの場合、デフォルト設定では十分ではありません。当初、クエリのパフォーマンスは速くなく、基本的には 2 番目のレベルかそれ以上でした。
ドキュメント、ブログ、公式チームからのサポートを通じて、過度のファイルの断片化が読み取りおよび書き込みのパフォーマンスに影響を与えないよう、期間と stt_trigger パラメーターを拡大し、後続のすべてのクエリがミリ秒レベルに最適化されるようにしました。
そこで、ビジネスシナリオごとに書き込み頻度が異なるため、同じライブラリを使用せず、別のライブラリで扱うのが最善であるという経験をまとめました。
スーパー テーブルは次のようにモデル化されます。
現在、日常的に使用されているビジネス クエリは、100 qps でリアルタイムにミリ秒単位のデータを返すことができます。
スーパー テーブルの設計特性から始めて、次のようなスーパー テーブル ディメンションで統計分析を実行する方がはるかに便利です。タイプと日付をフィルタリングすることによるフル ファンド クエリ—
select time, code, name, manager_id, manager_name, unit_net_value, pre_unit_net_value, accumulate_net_value, pre_day_rate, pre_week_rate, pre_month_rate, pre_three_month_rate, pre_half_year_rate, pre_year_rate, pre_cur_year_rate, pre_start_rate, last_time, last_unit_net_value, last_accumulate_net_value, asset_size from fund_net_value where time = #{date} and (type = '003009' or type = '003010')
別の例として、現在のファンドの純資産ランキングと収入ランキングのクエリは、単純な SQL によって実現できます。
select time, code, name, manager_id, manager_name, unit_net_value, pre_unit_net_value, accumulate_net_value, pre_day_rate, pre_week_rate, pre_month_rate, pre_three_month_rate, pre_half_year_rate, pre_year_rate, pre_cur_year_rate, pre_start_rate, last_time, last_unit_net_value, last_accumulate_net_value, asset_size from fund_net_value where time = #{date} and order by ${column} ${sort} limit #{offset}, #{size}
同時に、さまざまな監視ツールとソフトウェアを使用して監視データを収集、保存、分析する Grafana 視覚監視システムを構築し、ビジュアル インターフェイスを介してリアルタイムの監視チャートとアラートを提供して、プロジェクト リーダーが変更の問題を特定できるようにしました。リアルタイム性が向上し、サービスの信頼性と安定性がさらに向上しました。
最後に書きます
全体として、安定的かつ効率的な動作を確保することを前提として、当初の機能を徐々に TDengine にスムーズに置き換えてきました。国内ファンドプロジェクトがまだ始まったばかりであることを考慮すると、株式などの他のプロジェクトに関連して、この国内タイミングライブラリについてさらに調査と研究を行う必要があります。
会社概要
Sohu は中国で有名な総合インターネット企業で、主な事業分野にはニューメディア、通信、モバイル付加価値サービスが含まれ、エンターテイメント センター、スポーツ センター、ファッション、文化センターなどの複数の役割を統合しています。
著者について
Sohu Intelligent Platform のシニア開発エンジニア、Wupeng 氏は次のように述べています。
Microsoft、新しい「Windowsアプリ」 .NET 8を正式にGAリリース、最新LTSバージョン XiaomiはXiaomi Velaが完全にオープンソースであり、基盤となるカーネルはNuttXであることを正式に発表 Alibaba Cloud 11.12 障害の原因が明らかに:Access Key Service(アクセスKey) 例外 Vite 5 が正式にリリースされた GitHub レポート : TypeScript が Java に取って代わり、3 番目に人気のある言語になる Rust で Prettier を書き換えるために数十万ドルの報酬を提供 オープンソース作者に「プロジェクトはまだ生きていますか?」と尋ねる 非常に失礼で、失礼な バイトダンス: AI を使用して Linux カーネル パラメータ 演算子を自動的に調整する 魔法の操作: バックグラウンドでネットワークを切断し、ブロードバンド アカウントを無効化し、ユーザーに光モデムの変更を強制する