問題に直面しています: プロセス プラントのデータベースです。50 ミリ秒のサンプリング レートで最大 50,000 個のセンサーがあります。すべての測定値は少なくとも 3 年間保存する必要があり、リアルタイム クエリをサポートする必要があります (つまり、ユーザーは 1 秒未満の遅延で履歴データを表示できます)。私は最近Time-series Databaseに関する記事を読みました。OpenTSDB、KairosDB、InfluxDB など、多くのオプションが用意されています。
どちらが目的に適しているか混乱していますか?これについて知っている人は私を助けてください!
更新 15.06.25
今日、OpenTSDB に基づいたテストを実行します。Virtual Box を使用して、3 つの CentOS x64 VM (1 つのマスター、2 つのスレーブ) のクラスターを作成しました。ホスト構成は 8 GB RAM、core i5 です。マスター VM 構成は 3 GB RAM で、スレーブ構成は 1.5 GB RAM です。以下のように、データを OpenTSDB に送信する python プログラムを作成します。
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.10.55", 4242))
start_time = time.time()
start_epoch = 1434192418;
for x in range(0, 1000000):
curr_epoch = start_epoch + x
tag1 = "put TAG_1 %d 12.9 stt=good\n" % (curr_epoch)
tag2 = "put TAG_2 %d 12.9 stt=good\n" % (curr_epoch)
tag3 = "put TAG_3 %d 12.9 stt=good\n" % (curr_epoch)
tag4 = "put TAG_4 %d 12.9 stt=good\n" % (curr_epoch)
tag5 = "put TAG_5 %d 12.9 stt=good\n" % (curr_epoch)
tag6 = "put TAG_6 %d 12.9 stt=good\n" % (curr_epoch)
tag7 = "put TAG_7 %d 12.9 stt=good\n" % (curr_epoch)
tag8 = "put TAG_8 %d 12.9 stt=good\n" % (curr_epoch)
tag9 = "put TAG_9 %d 12.9 stt=good\n" % (curr_epoch)
tag10 = "put TAG_10 %d 12.9 stt=good\n" % (curr_epoch)
str = tag1 + tag2 + tag3 + tag4 + tag5 + tag6 + tag7 + tag8 + tag9 + tag10
s.send(str)
print("--- %s seconds ---" % (time.time() - start_time))
ホストで python を実行すると、作業は約 220 秒後に完了します。だから、私は平均を得ました。毎秒最大 45000 レコードの速度。
更新 15.06.29
今回は 1 つの VM (5 GB RAM、3 コア、CentOS x64、疑似分散 Hadoop) のみを使用しました。Windows 7 ホストで 2 つの Python プロセスを実行して、データの 2 つの半分を OpenTSDB に送信します。平均 データの書き込み速度は、1 秒あたり最大 100,000 レコードでした。