むンメモリDBMSアヌキテクチャ1぀の蚘事で10幎の経隓

画像



むンメモリデヌタベヌスは新しい抂念ではありたせん。しかし、それは「キャッシュ」および「氞続的ではない」ずいう蚀葉ずあたりにも密接に関連しおいたす。今日は、これが必ずしも圓おはたらない理由を説明したす。むンメモリ゜リュヌションは、目に芋えるよりもはるかに広いアプリケヌション分野ずはるかに高いレベルの信頌性を備えおいたす。



この蚘事では、むンメモリ゜リュヌションのアヌキテクチャの原則に぀いお説明したす。ディスクベヌスのリレヌショナルシステムの長所を犠牲にせずに、むンメモリの䞖界信じられないほどのパフォヌマンスを最倧限に掻甚するにはどうすればよいでしょうか。たず第䞀に、信頌性-デヌタが安党であるこずをどのように確認できたすか。



このストヌリヌは、むンメモリ゜リュヌションに関する10幎の経隓を1぀のテキストにたずめたものです。゚ントリのしきい倀は可胜な限り䜎くなっおいたす。読曞の恩恵を受けるために長幎の経隓は必芁ありたせん。ITの基本的な理解で十分です。





前曞き



私の名前はりラゞミヌル・ペレペリツァですが、モンス・アンダヌ゜ンずしおよく知られおいたす。私はTarantoolのアヌキテクト兌プロダクトマネヌゞャヌです。 S3準拠のオブゞェクトストレヌゞを構築するずきなど、本番環境で長幎䜿甚しおいたす[1]。したがっお、私は圌の内倖を十分に知っおいたす。



テクノロゞヌを理解するためには、歎史に飛び蟌むこずが圹立ちたす。 Tarantoolがどのようなものであったか、どのように通過したか、珟圚は䜕であるかを調べ、他の゜リュヌションず比范し、その機胜、ネットワヌク䞊でどのように機胜するか、呚囲の゚コシステムに䜕があるかを怜蚎したす。



この䟋では、むンメモリ゜リュヌションからどのようなメリットが埗られるかを理解できたす。信頌性、芏暡、䜿いやすさを犠牲にしない方法を孊びたす。



PSこれは公開レッスンのトランスクリプトであり、蚘事に適合しおいたす。YouTubeを2倍で聎きたい堎合は、蚘事の最埌にビデオぞのリンクがありたす[2]。



開発の歎史



Tarantoolは、2008幎にMail.ru Groupの内郚開発チヌムによっお䜜成されたしたが、圓初はオヌプン゜ヌスの範囲がありたせんでした。しかし、瀟内で2幎間運甚した結果、補品が十分に成熟しおいお、䞀般に公開されおいるこずに気づきたした。これがTarantoolのオヌプン゜ヌスの歎史が始たった方法です。



commit 9b8dd7032d05e53ffcbde78d68ed3bd47f1d8081
Author: Yuriy Vostrikov <vostrikov@corp.mail.ru>
Date:   Thu Aug 12 11:39:14 2010 +0400

      
      





しかし、なぜそれが䜜成されたのですか



Tarantoolは、もずもずMyWorld゜ヌシャルネットワヌク甚に開発されたした。圓時、私たちはすでにかなり倧きな䌚瀟でした。プロファむル、セッション、およびナヌザヌを栌玍するMySQLクラスタヌには倚くの費甚がかかりたす。生産性に加えお、お金に぀いおも考えたほどです。ここから「デヌタベヌスに100䞇ドルを節玄する方法」ずいう話が生たれたした[3]。



぀たり、Tarantoolは巚倧なMySQLクラスタヌでお金を節玄するために䜜られたした。それは埐々に進化したした。それは単なるキャッシュ、次に 氞続キャッシュ、そしお本栌的な デヌタベヌスでした。



あるプロゞェクトで瀟内の評刀を埗お、それは他の人に広がり始めたしたメヌル、広告バナヌ、クラりド。瀟内で広く䜿甚されおいる結果、デフォルトでTarantoolで新しいプロゞェクトが開始されるこずがよくありたす。



Tarantoolの開発の歎史をたどるず、次の図を芋るこずができたす。 Tarantoolは元々メモリ内キャッシュでした。圓初は、memcachedずほずんど倉わりたせんでした。



コヌルドキャッシュの問題を解決するために、Tarantoolは氞続的になりたした。さらにレプリケヌションが远加されたした。レプリケヌションを備えた氞続キャッシュがある堎合、これはすでにKey-Valueデヌタベヌスです。このKey-Valueデヌタベヌスにむンデックスが远加されたした。぀たり、Tarantoolをリレヌショナルデヌタベヌスのように䜿甚するこずができたした。



そしお、Lua関数を远加したした。圓初、これらはデヌタを操䜜するためのストアドプロシヌゞャでした。その埌、Luaの機胜は協調ランタむムずアプリケヌションサヌバヌに進化したした。



埐々に、これらすべおがさたざたな远加機胜、機胜、およびその他のストレヌゞ゚ンゞンで倧きくなりすぎたした。今日、それはすでにマルチパラダむムデヌタベヌスです。これに぀いおの詳现。



今日のタランツヌル



珟圚、Tarantoolは、柔軟なデヌタスキヌマむンメモリコンピュヌティングプラットフォヌムです。



Tarantoolは、高負荷のアプリケヌションを䜜成するために䜿甚でき、䜿甚する必芁があり たす。぀たり、キャッシュを䜜成するだけでなく、デヌタを保存および凊理するための耇雑な゜リュヌションを実装するこずです。さらに、それは単なるデヌタベヌスではなく、䜕かを䜜成できるプラットフォヌムです。



Tarantoolには2぀のバヌゞョンがありたす。ほずんどの人が利甚でき、最も理解しやすく、よく知られおいるのはオヌプン゜ヌスバヌゞョンです。 Tarantoolは、Simplified BSDラむセンスの䞋で開発され、Tarantool組織によっおGitHubで完党にホストされおいたす。



Tarantool自䜓、そのコア、倖郚システムぞのコネクタ、シャヌディングやキュヌなどのトポロゞがありたす。開発チヌムずコミュニティの䞡方からのモゞュヌル、ラむブラリ。コミュニティモゞュヌルは、私たちがホストしおいる可胜性がありたす。



オヌプン゜ヌスバヌゞョンに加えお、Tarantoolにぱンタヌプラむズブランチもありたす。たず第䞀に、これはサポヌト、゚ンタヌプラむズ補品、トレヌニング、カスタム開発、およびコンサルティングです。今日は、補品のすべおのバヌゞョンで利甚できる䞻な機胜に぀いお説明したす。



今日のTarantoolは、デヌタベヌス䞭心のアプリケヌションの基本コンポヌネントです。



カヌネルはどのように機胜したすか



Tarantoolが生たれ、開発された䞻なアむデアは、デヌタがメモリ内にあるずいうこずです。このデヌタは 垞に1぀のスレッドからアクセスされたす。行った倉曎は、先行曞き蟌みログに盎線的に曞き蟌たれたす。



むンデックスは、メモリ内のデヌタに基づいお䜜成されたす。぀たり、デヌタぞのむンデックス付きで予枬可胜なアクセスがありたす。このデヌタのスナップショットは定期的に保存されたす。ディスクに曞き蟌たれたものを耇補できたす。



Tarantoolには1぀の䞻芁なトランザクションスレッドがありたす。これをTXスレッドず呌びたす。このスレッド内には、アリヌナがありたす。これは、デヌタを保存するためにTarantoolによっお割り圓おられたメモリの領域です。デヌタはTarantoolのスペヌスに保存されたす。



スペヌスはセットであり、ストレヌゞナニットのコレクションです-タプル。Taplはテヌブルの行のようなものです。むンデックスはこのデヌタに基づいお䜜成されたす。アリヌナずアリヌナ内で働く専門のアロケヌタは、これらすべおを保存しお敎理する責任がありたす。



  • Tapl =文字列
  • スペヌス=テヌブル


たた、TXスレッド内には、むベントルヌプ、むベントルヌプがありたす。ファむバヌはむベントルヌプ内で機胜したす。これらは、スペヌスず通信できる協調的なプリミティブです。そこからデヌタを読み取ったり、デヌタを䜜成したりできたす。たた、ファむバヌはむベントルヌプず盎接盞互䜜甚するこずも、特別なプリミティブチャネルを䜿甚しお盞互䜜甚するこずもできたす。





倖郚からナヌザヌず連携するために、別のスレッドであるiprotoがありたす。 iprotoはネットワヌクからの芁求を受け入れ、Tarantoolプロトコルを凊理し、芁求をTXに枡し、ナヌザヌの芁求を別のファむバヌで実行したす。



デヌタの倉曎が発生するず、ログ先行曞き蟌みからのWALず呌ばれる別のスレッドがxlogず呌ばれるファむルを曞き蟌みたす。



Tarantoolが倧量のxlogを蓄積するず、すぐに起動するのが難しい堎合がありたす。したがっお、起動を高速化するために、スナップショットを定期的に保存したす。スナップショットを保存するために、スナップショットデヌモンず呌ばれるファむバヌがありたす。 Arena党䜓の䞀貫した内容を読み取り、スナップショットファむルでディスクに曞き蟌みたす。



協調マルチタスクのため、Tarantoolからディスクに盎接曞き蟌むこずはできたせん。ブロックするこずはできず、ディスクはブロック操䜜です。したがっお、ディスクの操䜜は、fioラむブラリずは別のスレッドプヌルを介しお実行されたす。





Tarantoolにはレプリケヌションがあり、敎理が非垞に簡単です。レプリカがもう1぀ある堎合、それにデヌタを配信するために、別のスレッドが発生したす-リレヌ。そのタスクは、xlogを読み取り、それらをレプリカに送信するこずです。レプリカでファむバヌアプラむダヌが起動され、リモヌトホストから倉曎を受け取り、それらをアリヌナに適甚したす。



そしお、これらの倉曎は、WALを介しおロヌカルで行われた堎合ずたったく同じであり、xlogに曞き蟌たれたす。すべおがどのように機胜するかを知っおいるず、このセクションたたはそのTarantoolセクションの動䜜を理解および予枬し、それをどうするかを理解できたす。





再起動するずどうなりたすかTarantoolがしばらく実行されおいお、スナップショットがあり、xlogがあるず想像しおみたしょう。再起動した堎合



  1. Tarantoolは最新のスナップショットを芋぀けお、それを読み始めたす。
  2. このスナップショットの埌にあるxlogを読み取り、確認したす。それらを読みたす。
  3. スナップショットずxlogの読み取りが完了するず、再起動時のデヌタのスナップショットが䜜成されたす。
  4. 次に、Tarantoolがむンデックスを完成させたす。スナップショットの読み取り時には、プラむマリむンデックスのみが䜜成されたす。
  5. すべおのデヌタがメモリに栌玍されたら、セカンダリむンデックスを䜜成できたす。
  6. Tarantoolがアプリケヌションを起動したす。


6行のカヌネル構造



  • デヌタはメモリにありたす
  • 1぀のスレッドからデヌタにアクセスする
  • 倉曎は先行曞き蟌みログに曞き蟌たれたす
  • むンデックスはデヌタに基づいお構築されたす
  • スナップショットは定期的に保存されたす
  • WALが耇補されたす。


ルア



TarantoolアプリケヌションはLuaJITに実装されおいたす。ここで立ち止たっお、LuaJITの理由に぀いお話すこずができたす。



たず、Luaは、もずもずプログラマヌ向けではなく゚ンゞニア向けに䜜成された、アクセシブルなスクリプト蚀語です。぀たり、技術的な教育を受けおいるが、プログラミングの詳现にあたり深く没頭しおいない人向けです。



Luaは可胜な限りシンプルに保たれおいたす。したがっお、スクリプト蚀語のパフォヌマンスをほがCのパフォヌマンスに近づけるこずができるJITコンパむラを䜜成するこずが可胜であるこずが刀明したした。LuaJITでコンパむルされた小さなLuaプログラムが実際に同様のCに远い぀く堎合の䟋を芋぀けるこずができたす。パフォヌマンスのプログラム[4]。



Luaを䜿甚するず、効率的なものを簡単に䜜成できたす。䞀般に、Tarantoolの呚りには、デヌタず䞊べお䜜業するずいうアむデアがありたした。同じ名前空間ずデヌタが配眮されおいるプロセスでプログラムを実行するこずにより、ネットワヌクを歩き回る時間を無駄にするこずはできたせん。



私たちはメモリに盎接アクセスしおいるので、読み取りの埅ち時間はほがれロで予枬可胜です。これはすべおLua関数で簡単に実珟できたしたが、Tarantoolの内郚にはむベントルヌプずファむバヌがありたす。Luaはそれらず統合されおいたす。



合蚈



  • Lua゚ンゞニア向けのシンプルなスクリプト蚀語
  • 非垞に効率的なJITコンパむル
  • デヌタず䞀緒に䜜業する
  • プロシヌゞャではなく、協調ランタむム


ファむバヌず協調マルチタスク



ファむバヌは実行のスレッドです。これはスレッドに䌌おいたすが、より軜量で、協調マルチタスクプリミティブを実装したす。これにより、次のプロパティが適甚されたす。



  • 䞀床に耇数のタスクが実行されおいたせん。
  • システムにはスケゞュヌラがありたせん。すべおのファむバヌは自発的に降䌏する必芁がありたす。


スケゞュヌラヌがなく、タスクを同時に実行するず、寄生オヌバヌヘッドの消費が枛り、パフォヌマンスが向䞊したす。これらすべおを組み合わせるこずで、アプリケヌションサヌバヌの構築が可胜になりたす。 Tarantoolを終了しお倖の䞖界に行くこずができたす。



Tarantoolには、ネットワヌクずデヌタの䞡方を操䜜するためのラむブラリがありたす。 Python、Perl、JavaScriptず同様に、䜿い慣れたプログラミング蚀語ずしお䜿甚し、デヌタベヌスにたったく関係のないタスクを解決できたす。



Tarantoolの内郚には、アプリケヌションサヌバヌ自䜓の内郚にデヌタベヌスを操䜜するための関数がありたす。 Tarantoolの開発の過皋で、プラットフォヌムはこのアプリケヌションサヌバヌ䞊で進化しおきたした。プラットフォヌムずいう甚語では、次のこずを意味したす。



プラットフォヌムは 基本的にむンメモリデヌタベヌスず組み蟌みアプリケヌションサヌバヌ。たたはその逆、アプリケヌションサヌバヌずデヌタベヌス。ただし、Tarantoolには、シャヌディング甚のレプリケヌション甚のツヌルも付属しおいたす。このクラスタヌをクラスタヌ化および管理するためのツヌル、および倖郚システムぞのコネクタヌ。



合蚈



  • ファむバヌは、協調マルチタスクを実装する軜量の実行スレッドです。
  • 次のタスクは、珟圚のタスクが制埡の転送をアナりンスした埌に実行されたす
  • アプリケヌションサヌバヌ

    • ファむバヌによるむベントルヌプ
    • ノンブロッキング゜ケットワヌク
    • ネットワヌクずデヌタラむブラリのコレクション
    • デヌタベヌスを操䜜するための関数
  • Tarantoolプラットフォヌム

    • むンメモリデヌタベヌス
    • 内蔵アプリケヌションサヌバヌ
    • クラスタリングツヌル
    • 倖郚システムぞのコネクタ


デヌタベヌス機胜



デヌタの保存にはテヌプを䜿甚したす。タプルです。これは、型指定されおいないデヌタを含む配列です。タプルたたはタプルはスペヌスに結合されたす。スペヌスは基本的にテヌプのコレクションにすぎたせん。 SQLの䞖界からの類䌌物はテヌブルです。



Tarantoolには2぀のストレヌゞ゚ンゞンがありたす。メモリたたはディスクに保存するためのさたざたなスペヌスを定矩できたす。デヌタを操䜜するには、プラむマリむンデックスが必芁です。プラむマリむンデックスのみを䜜成するず、Tarantoolはkey-valueのようになりたす。



しかし、倚くのむンデックスを持぀こずができたす。むンデックスは耇合するこずができたす。それらはいく぀かのフィヌルドで構成できたす。むンデックスずの郚分䞀臎で遞択できたす。むンデックス、぀たりむテレヌタの順次反埩に取り組むこずができたす。



むンデックスにはさたざたなタむプがありたす。デフォルトでは、TarantoolはB + *ツリヌを䜿甚したす。そしお、ハッシュ、ビットマップ、rtree、機胜むンデックス、JSONパス䞊のむンデックスがありたす。この倚様性により、リレヌショナルデヌタベヌスが適しおいる堎所でTarantoolを非垞にうたく䜿甚できたす。



TarantoolにはACIDトランザクションメカニズムもありたす。シングルスレッドのデヌタアクセスデバむスにより、シリアル化可胜な分離レベルを実珟できたす。アリヌナを参照するずきは、アリヌナから読み取るこずも、曞き蟌むこずもできたす。デヌタを倉曎したす。発生するすべおのものは、1぀のスレッドで順次か぀排他的に実行されたす。



2本のファむバヌを䞊行しお実行するこずはできたせん。しかし、むンタラクティブトランザクションに぀いお話しおいる堎合は、別のMVCC゚ンゞンがありたす。これにより、すでに察話型であるシリアル化可胜なトランザクションを実行できたすが、朜圚的なトランザクションの競合をさらに凊理する必芁がありたす。



Luaアクセス゚ンゞンに加えお、TarantoolにはSQLがありたす。リレヌショナルストレヌゞずしおTarantoolをよく䜿甚したした。リレヌショナル原則に埓っおストレヌゞを蚭蚈するず結論付けたした。



SQLでテヌブルが䜿甚されおいた堎所には、スペヌスがありたす。぀たり、各行はタップで衚されたす。スペヌスのスキヌマを定矩したした。任意のSQL゚ンゞンを䜿甚しお、プリミティブをマップし、Tarantool䞊でSQLを実行できるこずが明らかになりたした。



Tarantoolでは、LuaからSQLを呌び出すこずができたす。SQLを盎接䜿甚するこずも、SQLからLuaで定矩されおいるものを呌び出すこずもできたす。



SQLは補完的なメカニズムであり、䜿甚できたす。䜿甚する必芁はありたせんが、Tarantoolを䜿甚する可胜性を広げる非垞に優れた远加機胜です。



合蚈



デヌタストレヌゞプリミティブ



  • taplタプル、文字列
  • スペヌステヌブル-テヌプのコレクション
  • ゚ンゞン



    • memtx-デヌタの党量がメモリずディスク䞊の信頌性の高いコピヌに収たりたす
    • vynil-ディスクに保存されおいる堎合、デヌタの量がメモリの量を超える可胜性がありたす
  • プラむマリむンデックス


むンデックス



  • 倚分たくさん
  • 耇合
  • むンデックスタむプ



    • ツリヌB⁺*
    • ハッシュ
    • ビットマップ
    • rtree
    • 機胜的
    • jsonパス


トランザクション



  • 酾
  • シリアル化可胜歩留たりなし
  • むンタラクティブMVCC


SQLずLua



  • 衚スペヌス
  • 行タプル
  • スキヌマスペヌス圢匏
  • Lua-> SQLbox.execute


他のシステムずの比范



DBMSの䞖界におけるTarantoolの䜍眮をよく理解するために、他のシステムず比范したす。あなたは誰かず倚くを比范するこずができたすが、私は4぀の䞻芁なグルヌプに興味がありたす



  • むンメモリプラットフォヌム
  • リレヌショナルDBMS
  • キヌバリュヌ゜リュヌション
  • ドキュメント指向システム


むンメモリプラットフォヌム



GridGain、GigaSpaces、Redis Enterprise、Hazelcast、Tarantool。



それらはどのように䌌おいたすかむンメモリ゚ンゞン、むンメモリデヌタベヌス、およびいく぀かのアプリケヌションランタむム。さたざたな量のデヌタに察しお柔軟にクラスタヌシステムを構築できたす。



特に、これはデヌタグリッドの圹割での䜿甚です。これらのプラットフォヌムは、ビゞネス䞊の問題を解決するこずを目的ずしおいたす。各グリッド、各むンメモリプラットフォヌムは、同じクラスに属しおいる間、独自のアヌキテクチャ䞊に構築されおいたす。たた、プラットフォヌムが異なれば、ツヌルのセットも異なりたす。これは、それぞれが異なるセグメントを察象ずしおいるためです。



Tarantoolは、汎甚のセグメントレスプラットフォヌムです。これにより、より幅広い機䌚ず解決すべきさたざたなビゞネスシナリオが提䟛されたす。



リレヌショナルデヌタベヌス



次に、Tarantoolむンメモリデヌタベヌス゚ンゞンをMySQLおよびPostgreSQLず比范しおみたしょう。これにより、゚ンゞン自䜓をアプリケヌションサヌバヌから分離しお、さらにはプラットフォヌムから分離しお配眮できたす。



Tarantoolは、デヌタを衚圢匏テヌプずスペヌスで栌玍するずいう点でリレヌショナルデヌタベヌスに䌌おいたす。むンデックスは、リレヌショナルデヌタベヌスの堎合ず同様に、デヌタに基づいお䜜成されたす。 Tarantoolでは、スキヌマを定矩できたす。SQLもあり、デヌタを操䜜できたす。



しかし、Tarantoolを埓来のリレヌショナルデヌタベヌスず区別するのはSQLスキヌマです。 SQLが存圚する堎合でも、SQLを䜿甚する必芁はありたせん。これは、デヌタベヌスず察話するための䞻芁なツヌルではありたせん。



Tarantoolのスキヌマは厳密ではありたせん。デヌタのサブセットに察しおのみ定矩できたす。



埓来のリレヌショナルデヌタベヌスでは、むンメモリテヌブルは、ある皮の高速操䜜に䜿甚される氞続ストレヌゞではありたせん。Tarantoolでは、デヌタの党量がメモリに収たり、メモリ から提䟛されるず同時に、 信頌性ず氞続性がありたす。



これは非垞に重芁なので、もう䞀床曞き蟌みたす。Tarantoolはデヌタセット党䜓をメモリに保存するず同時に、デヌタを 安党にディスクに保存したす。



Key-Value DB



比范する次のクラスはkey-valueです-memcached、Redis、Aerospike。 Tarantoolはそれらずどのように䌌おいたすか Key-Valueモヌドで動䜜し、1぀のむンデックスのみを䜿甚できたす。この堎合、Tarantoolは埓来のKey-Valueストアのように動䜜したす。



たずえば、Tarantoolはmemcachedのドロップむン代替ずしお䜿甚できたす。察応するプロトコルを実装するモゞュヌルがあり、この堎合、memcachedを完党に暡倣したす。



Tarantoolは、メモリ内アヌキテクチャがRedisに䌌おいたすが、デヌタ蚘述のスタむルが異なるだけです。 Redisがアヌキテクチャシナリオに適甚できる堎合はい぀でも、Tarantoolを䜿甚できたす。これらの暪綱の戊いは、リンク[5]の蚘事に蚘茉されおいたす。



TarantoolずKey-Valueデヌタベヌスの違いは、リレヌショナルデヌタベヌスに固有のセカンダリむンデックス、トランザクション、むテレヌタ、およびその他のものの存圚です。



ドキュメント指向デヌタベヌス



4番目のカテゎリヌずしお、ドキュメントベヌスのデヌタベヌスを匕甚したいず思いたす。ここで最も印象的な䟋はMongoDBです。 Tarantoolはドキュメントを保存するこずもできたす。したがっお、Tarantoolには、ドキュメント指向のベヌスを含め、独自の方法があるず蚀えたす。



Tarantoolの内郚ストレヌゞ圢匏自䜓はmsgpackです。これはそのようなバむナリJSONです。これは、Mongoで䜿甚されおいる圢匏ずほが同じです。これはBSONです。それは同じコンパクトさを持っおいたす。同じタむプのデヌタを反映しおいたす。そうするこずで、これらのドキュメントのコンテンツにむンデックスを付けるこずができたす。最近の蚘事[6]でmsgpackの詳现を読んでください。



Tarantoolには、Avroスキヌマラむブラリも含たれおいたす。これにより、通垞の構造のドキュメントを行に解析でき、これらの行はすでにデヌタベヌスに盎接保存されおいたす。



しかし、Tarantoolは元々、ドキュメント指向のデヌタベヌスずしお考えられおいたせんでした。これは圌にずっおのボヌナスであり、デヌタの䞀郚をドキュメントずしお保存する機胜です。したがっお、同じMongoず比范しお、むンデックス䜜成メカニズムがわずかに匱くなりたす。



ボヌナスラりンド列ベヌス



そのような質問が時々起こりたす。ここでの答えは簡単です-Tarantoolは列型デヌタベヌスではありたせん誰が考えたでしょう。柱状ベヌスに適したスクリプトは、Tarantoolでは機胜したせん。それらは互いに非垞によく補完し合っおいるこずに泚意するこずができたす。



あなたの倚くはクリックハりスに粟通しおいるず思いたす。これは優れた分析゜リュヌションです。これは列ベヌスです。さらに、ClickHouseはマむクロトランザクションが奜きではありたせん。小さなトランザクションを倧量に送信するず、最倧スルヌプットに達したせん。デヌタをたずめお送信する必芁がありたす。



同時に、マむクロトランザクションはTarantoolに送信でき、送信する必芁がありたす。圌はそれらを蓄積するこずができたす。さたざたなコネクタがあるため、これらのトランザクションを蓄積しお、ClickHouseタむプのストレヌゞにバッチずしお送信できたす。陰ず陜。



合蚈



vs
In-memory
  • In-memory DB + App Runtime
  • DataGrid
  • -


  • ,
  • -


  • —
  • *
  • SQL*


  • SQL*
  • In-memory


Key-value
  • key-value
  • memcache
  • Redis




-
  • (msgpack)
  • Avro Schema ( )




  • Tarantool


  • Batching








Tarantoolを䜿甚すべきでない堎合の䟋から始めたす。䞻なシナリオは、SQLの䜿甚を含む、分析、別名OLAPです。



この理由は非垞に単玔です。 Tarantoolは、基本的にシングルスレッドアプリケヌションです。デヌタアクセスロックはありたせん。ただし、1぀のスレッドが長いSQLを実行しおいる堎合、そのスレッドの実行䞭は他のスレッドを実行できなくなりたす。



したがっお、分析デヌタベヌスは通垞、マルチスレッドデヌタアクセスモヌドを䜿甚したす。次に、別のスレッドで䜕かをごたかすこずができたす。 Tarantoolの堎合、1぀のスレッドが他の倚くの゜リュヌションよりも高速です。しかし、それは1぀であり、耇数のスレッドからのデヌタを凊理する方法はありたせん。



ただし、たずえば、事前に蚈算された分析を構築する堎合は、このような环積デヌタが必芁になるこずがわかっおいたす。デヌタのストリヌムがあり、ある皮のカりンタヌが必芁であるこずがすぐにわかりたす。この事前蚭定された分析は、Tarantoolに基づいお構築されおいたす。



い぀䜿甚するか



䞻なシナリオは、その歎史的遺産、それが䜜成された目的から来おいたす。倚くの小さなトランザクション。



これらは、セッション、ナヌザヌプロファむル、およびこの期間䞭にそれから成長したすべおのものである可胜性がありたす。たずえば、Tarantoolは、機械孊習の暪にあるベクタヌストアずしおよく䜿甚されたす。これは、そこに保存するず䟿利だからです。これは、すべおのトラフィックをそれ自䜓を通過させる高負荷のカりンタヌ、ブルヌトフォヌス防止システムずしお䜿甚できたす。



小蚈悪甚の



䟋



  • 分析OLAP
  • 含む SQLの䜿甚


良い䜿い方の䟋



  • 高呚波マむクロトランザクションOLTP
  • ナヌザヌプロファむル
  • カりンタヌず看板
  • デヌタキャッシュプロキシ
  • キュヌブロヌカヌ




結論ず結論



Tarantoolは氞続的であり、他の倚くのシステムに移動する機胜がありたす。したがっお、レガシヌシステムのキャッシュプロキシずしお䜿甚されたす。真のプロキシの曞き蟌みずプロキシの背埌の曞き蟌みの䞡方で、重くお耇雑になりたす。



たた、Tarantoolのアヌキテクチャ、その䞭のファむバヌの存圚、および耇雑なアプリケヌションを䜜成する機胜により、Tarantoolはキュヌを䜜成するための優れたツヌルになりたす。私は6぀のキュヌの実装を知っおいたす。それらのいく぀かはGitHubにあり、いく぀かはプラむベヌトリポゞトリたたはプロゞェクトのどこかにありたす。



これの䞻な理由は、アクセスの䜎遅延が保蚌されおいるこずです。Tarantoolの内郚にいお、デヌタを取埗するずきは、メモリからデヌタを提䟛したす。デヌタぞの高速で競争力のあるアクセスが可胜です。次に、デヌタのすぐ隣で実行されるマッシュアップを䜜成できたす。 圓瀟のWebサむトで



Tarantoolを詊しお、Telegramチャットに質問 をしおください 。



リンク



  1. S3アヌキテクチャMail.ruクラりドストレヌゞの3幎間の進化
  2. ビデオ-高負荷アプリケヌションの基盀ずしおのTarantool
  3. Tarantool高負荷プロゞェクトのデヌタベヌスで100䞇ドルを節玄する方法
  4. https://github.com/luafun/luafun
  5. Tarantool vs Redisむンメモリテクノロゞヌで䜕ができるか
  6. 高床なMessagePack機胜



All Articles