Vertica データベースは OLTP データに使用できますか?
もしそうなら、これを行うことの長所と短所は何ですか?
Vertica 対 Oracle の戦いを探しています :)
Oracle ライセンスは非常に高価なので、Vertica はより良い価格で仕事をしてくれますか? thxすべて
5 に答える
Verticaをトランザクションデータベースとして使用することは悪い考えです。これは、データウェアハウジングツールとして設計されています。基本的に、最適化された方法でデータの読み取りと書き込みを行います。たくさんの取引?それはそれがするように設計されていることではありません。
VoltDBを調べることをお勧めします。Verticaの背後にいる力であるMichaelStonebreakerもその会社を設立しました。彼の基本的な哲学は、Oracle、SQL Serverなどはすべてを実行するように設計されているため、高性能にはうまく機能しないというものです。将来的には、特定のタスク用に設計されたデータベースがあります。
そのため、彼はVerticaとなるデータウェアハウジングのいくつかの概念を持っていました。トランザクションデータベースには、VoltDBがあります。記録のために、HPが所有していません。
記録のために、私はVoltDBを使用していません。私の知る限り、Verticaがソリューションとして成熟しているほど成熟していませんが、多くの可能性があるように見えます。
この質問は少し古いですが、私の経験を共有します。
ワークロードを慎重に検討しない限り、OLTP として vertica をお勧めしません。
他の回答で述べたように、Vertica には 2 種類のストレージがあります。ROS は読み取り最適化ストレージ、WOS は書き込み最適化ストレージです。WOS は純粋にメモリ内にあるため、挿入のパフォーマンスは向上しますが、すべての小さな更新をクエリして結合する必要があるため、クエリは遅くなります。Vertica は理論的には小さな負荷を処理できますが、実際には、パフォーマンスに関してはうまくいきませんでした。また、WOS には欠点があります。つまり、データベースに障害が発生した場合、最後の正常なエポックにロールバックするときに WOS が必ずしも保持されないということです。(ROSもそうではありませんが、実際にはROSからの損失ははるかに少なくなります)。
ROS ははるかに信頼性が高く、読み取りパフォーマンスが向上しますが、慎重に設計しなければ、特定の数を超えるクエリを処理することはできません。vertica は水平方向にスケーラブルですが、実際には大きなテーブルはすべてのノードでセグメント化されるため、すべてのノードでクエリを実行する必要があります。したがって、ノードを追加することは、より多くの同時クエリを処理することを意味するのではなく、クエリごとの作業が少なくなることを意味します。テーブルがセグメント化されていないほど小さい場合、これは問題にならない可能性があります。
また、OLTP は通常、多数の同時トランザクションを意味するため、リソース プールを慎重に計画する必要があることにも注意してください。デフォルトでは、vertica には、サーバーごとの最小コア数または RAM/2GB の一般的なリソース プールの同時実行が計画されています。基本的に、この値が行うことは、セグメント化されたクエリのデフォルトのメモリ割り当て PER NODE を決定することです。したがって、デフォルトでは、vertica はコアよりも多くのクエリを実行できません。この値は調整できますが、メモリの上限に達すると、ノードごとにメモリが割り当てられるため、できることはあまりなく、ノードを追加しても役に立ちません。リソース プールのメモリ割り当てでエラーが発生した場合は、最初に確認する必要があります。
さらに、Vertica は削除と更新 (バックグラウンドでの削除と挿入に解決される) が苦手なので、これらがワークロードの通常の部分である場合、Vertica はおそらく悪い選択です。個人的には、削除/更新が必要なディメンション テーブルに MySQL を使用し、そのデータを定期的に vertica に同期して結合に使用しています。
個人的には、OLTP っぽいリアルタイムっぽいデータベースとして Vertica を使用しています。読み込みを 5 分間隔でバッチ処理することで、インサートの数/サイズに関して vertica を満足させています。これらのバッチは COPY DIRECT を使用して挿入されるため、WOS を完全に回避できます (バッチが大きい場合にのみこれを行ってください。これにより、ROS コンテナーの作成が強制され、頻繁に行うと問題が生じる可能性があります)。可能な限り多くのプロジェクションをセグメント化して、より適切にスケールアウトできるようにします。これにより、クエリが 1 つのノードのみにヒットし、1 つのノードのみにメモリが割り当てられるためです。これまでのところうまく機能しており、UI からのリアルタイムのクエリで 1 日に約 50 億行をロードしています。
Up_one - 電気通信のユースケースを考慮して - CDR やその他のことを行っていますか?
元の質問に答えるには、はい、Vertica は最適かもしれませんが、データのロード方法、更新の方法、データ サイズと SLA によって異なります。当時働いていた通信会社で Vertica を実装したので、私はこの分野に非常に精通しています。