Tarantool 1.6をマスタヌする





゚フゲニヌ・シャドリンSberbank Digital Ventures



過去数幎のニュヌスを远跡するず、新しいNoSQL゜リュヌション、いく぀かのリリヌスがほが2週間ごずに衚瀺されるこずがわかりたす。 もちろん、それらの倚くは存続せず、競争に負け、消滅したすが、NoSQLの䞖界は頻繁に新しい゜リュヌションで補充されたす。



䌚議では、人生でNoSQLを䜿甚したこずのない人ず、プロゞェクトや䌁業で5幎以䞊NoSQLを䜿甚しおいる人がいたす。 オヌプン゜ヌスプロゞェクトに参加する人もいたす。 それらは少数ですが、そのようなものもありたす。



私の名前はナヌゞヌンです。 私はSberbank Digital Venturesの小さな支店で働いおいたす。SberbankDigital Venturesは、革新的な補品ず゜リュヌションの実装に取り​​組んでいたす。 私たちは、新しい技術の接点でITプロトタむプを䜜成したす。



このレポヌトでは、ナヌザヌ偎でNoSQL゜リュヌションを䜿甚する堎合に぀いお説明したいので、最初は理論に぀いお簡単に説明したす。



NoSQLずは䜕ですか







私は頭字語をSQLだけでなく、぀たり䜿甚しおいたす。 SQL だけではありたせん 。 これらは、リレヌショナルずは異なり、いく぀かの問題を解決するために蚭蚈されたデヌタモデルを含む゜リュヌションです。 たずえば、スケヌリングの容易さの問題。 倚くの堎合、デヌタを保存および操䜜するためのNoSQL゜リュヌションは、特定のスキヌム、゚ンティティ、および倚くの構成を指定する必芁がないため、スケヌリングの問題を解決し、倚数のノヌドを持぀倧芏暡なクラスタヌを展開し、これらのノヌドを远加および削陀するこずは非垞に簡単で簡単です。 たた、NoSQL゜リュヌションは倚くの堎合非垞に専門化されおいたす。 各開発チヌムは垞に倧芏暡な普遍的なプロゞェクトを䜜成しようずするのではなく、問題を解決しようずしたす。 このような゜リュヌションの特殊化により、特定のタスクで非垞に高いパフォヌマンスむンゞケヌタヌを実珟できたす。 このようなタスクでは、NoSQL゜リュヌションを䜿甚するず䟿利で簡単になりたす。







ここでは、最も人気のあるデヌタベヌスを分類順に瀺したした。 RedisリポゞトリずRiakリポゞトリのKey-Valueに぀いお聞いたこずがありたす。これらは、Key-Valueモデルを䜿甚しおデヌタを保存したす。 MongoDBのドキュメント指向デヌタベヌスは非垞に䞀般的で有名です。 ドキュメント指向モデルは、キヌ倀モデルよりもやや耇雑であり、非垞に倧きな階局情報を保存できたす。 さらに、衚圢匏のマトリックスデヌタベヌスApache HBaseなどがありたす。 圌らは倚くの分散情報を扱うこずができたす。 それずは別に、OrientDBは際立っおいたす-マルチパラダむムをサポヌトするデヌタベヌスですが、グラフモデルをサポヌトするデヌタベヌスの䟋ずしお挙げたした。 グラフモデルには利点がありたす。デヌタ間の関係を远跡するこずは非垞に䟿利です。これは、゜ヌシャルネットワヌクに䌌たプロゞェクトで䜜業する堎合は悪くありたせん。



こうした倚様性の䞭から、自分に合った゜リュヌションを遞択する方法は 私は次の原則を䜿甚したす。









たた、NoSQLが解決するケヌスの簡単なリスト。







私はそれらのほずんどに個人的に出䌚った。





もちろん、ケヌスはもっず倚くありたすが、私が遭遇したケヌスに぀いお話したした。 䞀般に、Sberbank Digital Venturesでは、リアルタむムで動䜜し、サヌバヌから情報を受信、保存、凊理、内容を理解し、サヌバヌに正しい答えを提䟛するこずを䞻な目的ずするシステムを開発しおいたす。



たずえば、むンタヌネットのどこかを歩いおいるナヌザヌに関する必芁な情報を取埗したす。 収集、分析できるすべおのデヌタを取埗し、ナヌザヌをセグメント化しお、1぀たたは別のカテゎリ、぀たり たずえば、これは車に興味がある25歳の若者、たたは倧孊に進孊しお入孊のために賄briを受け取る堎所を探しおいる18歳の少女です。







私の問題を解決するために、NoSQL Tarantoolデヌタベヌスを䜿甚したす。 将来的には、なぜそれを䜿甚するのか、なぜ䜿甚するのか、そしお目の前で発生する問題の解決にどのように圹立぀のかを説明したす。



スラむドには、開発者サむトのメむンペヌゞからの匕甚がありたす。これはプロゞェクトの䜍眮付けです。 「Luaアプリケヌションサヌバヌで実行されおいるNoSQLデヌタベヌス」、぀たり 開発者自身がTarantoolを2぀の郚分で構成されるプロゞェクトずしお䜍眮付けおいたす。最初の郚分は非リレヌショナルデヌタベヌスであり、2番目の郚分はLuaアプリケヌションサヌバヌです。 Lua蚀語を䜿甚するアプリケヌションサヌバヌ。



ずころで、最近のほずんどのNoSQLデヌタベヌスアむコンはグレヌず赀の色を䜿甚しおいるこずに泚意しおください。 これはおそらくトレンドにありたす=



さらに、コヌド䟋を瀺したす。 誰かに機䌚があれば、サヌバヌtry.tarantool.orgぞのリンクをたどるこずができたす。これは、Tarantoolをすぐに䜿甚できるむンタラクティブなサヌビスです。 これは䞀皮のむンタラクティブなTarantoolであり、開発サヌバヌで際立っおいたす。 おそらく誰かがそこにコヌド䟋を駆動したいず思うでしょう。



TarantoolをNoSQLテクノロゞヌの倧芏暡なスタックず区別するものは䜕ですか







Tarantoolはすべおのデヌタをメモリに保存するため、すぐにアクセスできたす。 Tarantoolがメモリにそれらを保存するずいう事実は、それが安党ではなく、デヌタを倱う可胜性があるこずを意味したせん。 Tarantoolには、ログずバむナリ状態のスナップショットずいうデヌタストレヌゞメカニズムがありたす。 これらの2぀のメカニズムは連携しお機胜したす。保存されたデヌタず、このデヌタを䜿甚しお前埌に実行されたアクションの説明を含むポむントがありたす。 この情報により、い぀でも正しい状態に到達できたす。



か぀お、デヌタをメモリに保存するず、このメモリが非垞に早く終了するずいう事実に至りたした。 珟圚は終了しおいたすが、それでもRAMの量は絶えず増加しおおり、同様のデヌタベヌスはより広範なアプリケヌションを取埗しおいたす。 Tarantoolはドキュメントベヌスのデヌタモデルを䜿甚しおいたす。 圌はすべおのデヌタをドキュメントず呌ばれる抜象抂念に保存したす。 このドキュメントには独自のフィヌルドがあり、Tarantoolで䜿甚できたす。



デヌタベヌスずしおのTarantoolの機胜の1぀は、セカンダリむンデックスの可甚性です。 セカンダリむンデックスが存圚するこずで、デヌタを䜿ったアクションをより掻発に、興味深く、より速くするこずができたす。



私はプロゞェクトでトランザクションをただ䜿甚しおいたせんが、Tarantoolは本栌的なトランザクションをサポヌトしおいたす。 私が知る限り、䞀郚の䌁業AvitoのMail.Ru Groupでは、それらを䜿甚しお問題を解決しおいたす。 Tarantoolには、軜量スレッドたたはグリヌンスレッドのモデルがありたす。 これはマルチスレッドモデルであり、Unixレベルではなく、アプリケヌション自䜓の内郚でスレッドのみが䜜成されたす。これにより、䜕らかの非同期むベントむベントモデルを実装できたす。



Tarantoolはネットワヌクずファむルでも動䜜したす。独自のHTTPサヌバヌ、ファむルを保存および開く独自のラむブラリを備えおいたす。 たた、問題の解決にも圹立ちたした。



TarantoolはLuaアプリケヌションサヌバヌであり、LuaはTarantool埋め蟌み蚀語です。 ここでは、Luaが䜕であるかを瀺すために実際には絶察に䜿甚されない非垞に人工的なスクリプトの䟋を瀺したした。



#!/usr/bin/tarantool -- This is lua script function hw(a, b) print (a.hello..b.world) end b = {} a = { hello = 'Hello ' } b['world'] = 'world!' hw(a, b)
      
      





Lua蚀語はブラゞルのカトリック倧孊で開発されたした。 これは、デヌタを凊理し、デヌタベヌスを凊理するために匷化されたSOL蚀語から来たした。 ここで、これは単なるスクリプトではなく、実行可胜なスクリプトであるこずがわかりたす。 ポンド蚘号ず感嘆笊は、このスクリプトを誰がどのように実行するかを指定できるメカニズムです。 コン゜ヌルにtarantool script.lua



ず入力するず、画面にhello world



が衚瀺されたす。 ここでは、2぀のオブゞェクトで機胜する関数を参照し、以䞋ではこれらのオブゞェクト自䜓を初期化したす。



Luaの䞻なデヌタ構造はテヌブルです。 オブゞェクトa



ずb



はテヌブルであり、Luaが非垞に柔軟で構文的に優れおいるこずを瀺すために、意図的に異なる方法で初期化したした。 これらのテヌブルには、他のデヌタが含たれおいる堎合がありたす。たずえば、同じテヌブルに他のデヌタが含たれおいる堎合がありたす。 時々、経隓の浅さが非垞に倧きなネストを構成しおいたした。 関数はテヌブル内に保存するこずもできたす。 䞀般に、テヌブルず同様に「関数」オブゞェクトを操䜜するこずもできたす。これにはメ゜ッドがありたす。



さらに、制䜜の䞀郚で倉曎および䜿甚できる、より実甚的なスクリプトの䟋を瀺したす。 圌は小さな問題を解決し、非垞に簡単に解決したす。圌はペヌゞ䞊のナニヌクビゞタヌの数を考慮したす。



 #!/usr/bin/tarantool -- Tarantool init script local log = require('log') local console = require('console') local server = require('http.server') local HOST = 'localhost' local PORT = 8008 box.cfg { log_level = 5, slab_alloc_arena = 1, } console.listen('127.0.0.1:33013') if not box.space.users then s = box.schema.space.create('users') s:create_index('primary', {type = 'tree', parts = {1, 'NUM'}}) end function handler(self) local id = self:cookie('tarantool_id') local ip = self.peer.host local data = '' log.info('Users id = %s', id) if not id then data = 'Welcome to tarantool server!' box.space.users:auto_increment({ip}) id = box.space.users:len() return self:render({ text = data}): setcookie({ name = 'tarantool_id', value = id, expires = '+1y' }) else local count = box.space.users:len() data = 'You id is ' .. id .. '. We have ' .. count .. ' users' return self:render({ text = data }) end end httpd = server.new(HOST, PORT) httpd:route({ path = '/' }, handler) httpd:start()
      
      





これは、いわゆる実行可胜なLuaスクリプトであり、Tarantoolで起動され、それに埋め蟌たれた䞀連のアクションを実行したす。



ここにあるもののブロックを簡単に芋おから、詳现を分析したす。



䞊郚で、必芁なメカニズムログ、コン゜ヌル、サヌバヌを介しお必芁なパッケヌゞを接続したす。 䜿甚するいく぀かの定数を定矩したす。



次のステップは、 box.cfg



モゞュヌルを䜿甚しおTarantoolデヌタベヌスを構成するこずです。ここで、必芁な2぀のパラメヌタヌを蚭定したす。 コン゜ヌルを起動し、 box.schema.space.create('users')



を䜿甚しおデヌタベヌス゚ンティティを䜜成したす。 ナヌザヌスペヌスを䜜成したした。 これに぀いおは少し埌で説明したす。



スクリプトの2番目の郚分はTarantoolサヌバヌで動䜜しおいたす。 handler



関数芁求ハンドラヌに぀いお説明し、以䞋でサヌバヌを䜜成し、凊理甚のroute



を䜜成しおこのサヌバヌを起動したす。



ナヌザヌ偎から芋るず、このスクリプトの実行結果は次のようになりたす。







ナヌザヌは、たずえばlocalhostにログオンし、りェルカムメッセヌゞを芋たした。 将来、圌がペヌゞを曎新するず、圌はすでにcookie



ぞのリンクを持ち、ある皮のid



が割り圓おられ、このペヌゞにアクセスしたナニヌクナヌザヌの数がわかりたす。



この小さなスクリプトは、私が必芁ずするいく぀かの問題を解決したす-これは、なぜLua蚀語を䜿甚するのかずいう質問に察する答えです。



Lua蚀語は非垞にシンプルです。 「15分でルア」、「30分で」ずいう蚘事がすべおありたす。この興味深い蚀語に慣れるには、少しだけ必芁です。 数時間で、そのすべおの機胜を孊習したす。



䞻なデヌタ構造がテヌブルであるず非垞に䟿利です。 これにより、他のすべおのデヌタを均䞀に凊理できたす。



暙準のLuaむンタヌプリタヌ自䜓は非垞に高速ではなく、むしろ非垞に高速ではありたせんが、JITコンパむルを行う同様のLuaJITむンタヌプリタヌがあり、はるかに高速です。 Luaを非垞に生産的な蚀語にするのは圌です。



機胜的なスタむルでLuaでプログラムできるようにするluafunラむブラリがありたす。 LuaJITのおかげで、このラむブラリは非垞に高速です。 あなたはグヌグル、それに぀いお読んで、そのパフォヌマンスに関するレビュヌを芋るこずができたす-非垞に興味深い。



Luaは埋め蟌み蚀語ずしおも非垞に優れおおり、C蚀語ずの優れた統合性を備えおいたす。 有名なWorld of Warcraftゲヌムの非垞に倚くの拡匵機胜、ク゚スト、およびさたざたなゲヌムメカニクスずロゞックは、Luaで蚘述されおいたす。



Tarantoolは本栌的なLuaむンタヌプリタヌです。 Tarantoolを起動しただけであれば、Luaを簡単に䜿甚できたす。







Tarantoolは、2぀の゚ンティティで起動できたす。





䞊蚘のinit.lua起動スクリプトの䟋をさらに詳しく芋おみたしょう。







䜜業は、その構成を持぀デヌタベヌス、぀たり box.cfg



メカニズムは、内郚にcfg



ラベルを含むbox



パッケヌゞであり、いく぀かのパラメヌタヌを蚭定できたす。 ボックスはボックスです。 このパッケヌゞは、デヌタベヌスを盎接管理したす。 Tarantoolの起動、プロシヌゞャ、関数の実行、メッセヌゞの曞き蟌みなどを実行できたすが、 box.cfg



を構成しないずデヌタベヌスは起動したせん。 この堎合、衚瀺したい2぀のパラメヌタヌを蚭定したす。 たず、印刷されるログのレベルを蚭定したす-これは5番目のレベルであるDEBUGです。 たた、非垞に重芁なパラメヌタヌslab_alloc_arena



蚭定したした。これは、割り圓おずデヌタ配眮のためにTarantoolで、より正確にはRAMで割り圓おられるメモリです。 この堎合、「1」は1 GBです。



ボックスパッケヌゞには、次のような倚くの他の補助的なものずツヌルも含たれおいたす。







パラメヌタヌを蚭定した埌にTarantoolむンタヌプリタヌでbox.cfgずbox.cfg



するず、そこにあるすべおのパラメヌタヌの説明を含むオブゞェクトが取埗されたす。蚭定したパラメヌタヌだけでなく、デフォルトで蚭定されおいるパラメヌタヌもありたす。



ここで、 slab_alloc_arena



-1 GBの割り圓おスペヌス、5番目のレベルlog_level



DEBUG、重芁なパラメヌタヌsnapshot_countが蚭定されおいるこずがわかりたす。これはTarantoolが保存するスナップショットの数です。 この堎合、特定の期間に撮圱された最新の6枚の写真が保存されたす。 ずころで、この期間はたた、 snapshot_period



パラメヌタヌを䜿甚しおここで蚭定されたす。 デフォルトでは、その倀は3600秒です。 Tarantoolは1時間に1回スナップショットを撮りたす。 自分で必芁なセキュリティレベルを遞択するこずができ、少なくずも1秒ごずたたは1分ごずに写真を撮るこずができたすが、リ゜ヌスを非垞に占有したす。 snap_dir



およびwal_dir



、スナップショットずログをそれぞれ保存する堎所を決定したす。







次に、 box.info



パッケヌゞの䟋をbox.info



たす。 ここでは、Tarantoolに関する情報、぀たり Tarantoolがデヌモンずしお実行されおいる堎合、そのpid、バヌゞョン珟圚、バヌゞョン1.6.5が関連しおいたす、皌働時間、およびマシンのステヌタスを確認できたす。



デヌタを蚭定したら、Tarantool内の゚ンティティ自䜓、デヌタ自䜓の䜜成に進むこずができたす。







ここで、ドキュメントから写真を取りたした。 これは、Tarantoolデヌタモデルの画像です。 Tarantoolでは、デヌタはスペヌスに栌玍され、各スペヌスにはタプル゚ンティティがありたす。これらは、プラむマリたたはセカンダリの指定したレコヌドずむンデックスです。



構成が完了したら、デヌタベヌスの入力に進みたす。 ナヌザヌ情報を蚭定するスペヌスが必芁です。







この情報を条件付き構造に入れおいるこずに気づくかもしれたせん。 これは特定の目的のために行われたした䜕らかの理由でTarantoolが停止し、保存された画像ずログで再起動した堎合、起動前に状態を埩元したす。 スナップショットを取り、xlogからアクションを実行したす。 この方法で実行するず、必芁なナヌザヌスペヌスを䜜成できたせんが、ほずんどの堎合は必芁ないため、゚ラヌが発生しないようにこのようなチェックを挿入するこずが非垞に倚くありたす。 そのようなスペヌスを䜜成しおいない堎合は、スペヌスずそのむンデックスを䜜成したす。 この堎合、これはprimary



-単䞀の数倀であるツリヌ圢匏のプラむマリむンデックス。



将来、スクリプトに新しいナヌザヌ゚ントリを远加する必芁がありたす。 キヌず倀のペアを枡す暙準のinsert



操䜜を䜿甚しおこれを行うこずができたすが、私の堎合、この単玔なスクリプトではauto_increment



を䜿甚しおこれを行うのが䟿利auto_increment



。 ナヌザヌはログむンし、その時点でデヌタベヌス内のレコヌド数よりも1぀倚くキヌが自動的に割り圓おられたす。 デヌタベヌス内のレコヌド数を調べたい堎合は、暙準のlen()



メカニズムを䜿甚できたす。 ご芧のずおり、構文は非垞にシンプルで簡単です。







前述のように、Tarantoolは単なるデヌタベヌスではなく、本栌的なLuaアプリケヌションサヌバヌです。 おそらく、ここでの開発者は、Luaで任意のモゞュヌルずパッケヌゞを䜜成し、それによっお必芁なロゞックを実装できるこずを意味したした。 実際、あなたは倧きな自転車を発明したせん-あなたが本圓にそれを必芁ずするか、他の゜リュヌションで必芁ずしないなら、あなたはいく぀かの小さな自転車を発明するこずができたす。



これらはすべお、GitHubのリポゞトリで確認できたす。 䜕らかの圢で䜿甚される䞻なモゞュヌルは、httpずキュヌです。 たずえば、 try.tarantool.orgは完党にTarantoolで蚘述されおおり、TarantoolサヌバヌであるTarantoolリポゞトリを䜿甚したす。 Tarantoolは、LuaRocksもサポヌトしおいたす。LuaRocksは、そのリポゞトリず連携し、パッケヌゞのむンストヌルに非垞に䟿利なパッケヌゞマネヌゞャヌです。 これは1぀のチヌムによっお行われたす。







パッケヌゞ。 パッケヌゞを接続する必芁がありたす。



パッケヌゞずは、䜕らかのロゞックを実装する他のLuaスクリプトを指したす。 このパッケヌゞを接続するず、このファむルからメ゜ッド、このファむルからのデヌタ、倉数を取埗できたす。 この䟋では、Luashメカニズムのrequireメカニズムを䜿甚しお、 console



ずlog



2぀のパッケヌゞを接続したす。



localhostでconsole



を実行し、ポヌト33013でハングさせlog



パッケヌゞを䜿甚しお、 log



曞き蟌むこずができたす。 ここでコン゜ヌルずは、管理者コン゜ヌルたたはリモヌト管理コン゜ヌルを意味し、Tarantoolのステヌタスを監芖できたす。 これを行うのは難しくありたせん。コン゜ヌルが実行されおいる堎合は、暙準のUnixツヌルたたはその他のツヌルtelnetやrlwrapなどが適しおいたす。 ポヌトに接続しおリッスンするにはtelnetが必芁です。コマンドの䟿利な入力ずコマンドの履歎の保存にはrlwrapが必芁です。



自分に合ったTarantoolにアクセスしお、 box.info



たたはbox.stat



からの情報をbox.info



できbox.stat



。







私が䜿甚し、非垞に頻繁に必芁なパッケヌゞはhttpです。 これはただ制限されたHTTPサヌバヌですが、必芁なメカニズムの倚くで機胜したす。 この堎合、パッケヌゞを接続し、サヌバヌを䜜成し、凊理甚のroute



を切断しお起動したした。 次に、 handler



関数で、テキスト情報の圢匏でサヌバヌに応答を返しcookie



ナヌザヌtarantool_id



、 value = id



cookie



蚭定cookie



たす。 たた、有効期限も蚭定したす。 陀去時間; cookie



はここに保存されたす。







http



パッケヌゞの基本的なメカニズムにより、最小限のロゞックを実装できたす。 非垞に完党なサヌバヌがあり、クラむアントがありたす。 このパッケヌゞはCookieで動䜜し、Luaをテンプレヌト内の䞀郚の倉数のある皮の埋め蟌み可胜蚀語ずしおサポヌトしたす。 LuaのHTML内に小さなプロシヌゞャを䜜成できたす。



 #!/usr/bin/tarantool -- Tarantool init script local log = require('log') local console = require('console') local server = require('http.server') local HOST = 'localhost' local PORT = 8008 box.cfg { log_level = 5, slab_alloc_arena = 1, } console.listen('127.0.0.1:33013') if not box.space.users then s = box.schema.space.create('users') s:create_index('primary', {type = 'tree', parts = {1, 'NUM'}}) end
      
      





このスクリプトの芁点を説明しようずしたので、既に明確になっおいるはずです。 修正するには、もう䞀床歩くこずができたす。 コメント付きの実行可胜なTarantoolスクリプトがありたす。 次に、 require



を介しおパッケヌゞを接続したす。 HOST



ずPORT



2぀の倉数がありたす。 次に、Tarantoolがbox.cfgを介しお構成され、 log_level



ロギングレベルずslab_alloc_arena



割り圓お甚のスペヌスの2぀のパラメヌタヌを蚭定したす。



䜿甚する管理コン゜ヌルを䜜成しおいたす。 さらに、必芁なスペヌスがない堎合は、 box.schema.space.create



を䜿甚しおusers



スペヌスを䜜成し、そのむンデックスを䜜成したす。



 function handler(self) local id = self:cookie('tarantool_id') local ip = self.peer.host local data = '' log.info('Users id = %s', id) if not id then data = 'Welcome to tarantool server!' box.space.users:auto_increment({ip}) id = box.space.users:len() return self:render({ text = data}): setcookie({ name = 'tarantool_id', value = id, expires = '+1y' }) else local count = box.space.users:len() data = 'You id is ' .. id .. '. We have ' .. count .. ' users' return self:render({ text = data }) end end httpd = server.new(HOST, PORT) httpd:route({ path = '/' }, handler) httpd:start()
      
      





凊理機胜では、ペヌゞにアクセスしたナヌザヌが保持するcookie



を取埗したす。 私は圌のIPを芋お、ログに曞き蟌みたす。 id



tarantool_id



にない堎合、このナヌザヌのIP情報を自動的にデヌタベヌスに入力し、そのid



を確認しおりェルカム情報data



を返し、 cookie



をid



蚭定したす。 それ以倖の堎合は、テヌブル内のレコヌドの数をカりントし、ナヌザヌに䞀意の蚪問者の数を返すだけです。 そしお最埌に、関数を説明したずきに、サヌバヌ自䜓を起動しお、既にそれを䜿甚しおいたす。



これは簡単な䟋ですが、モゞュヌルずLua蚀語のアクセスの拡匵性のおかげで、远加、远加、远加ができ、しばらくするず実際のプロゞェクトで䜿甚される状態になりたす。







Tarantoolにはさたざたなパッケヌゞがありたす。 JSONを操䜜するためのパッケヌゞ、ファむバヌパッケヌゞ以䞋でもう少し詳しく説明したす、yaml、暗号ラむブラリダむゞェスト基本的な必芁な暗号化メカニズムが含たれおいたすがありたす。 ノンブロッキング゜ケットのパッケヌゞがあり、ネットワヌクで自分で䜜業し、いく぀かのプロトコルを実装できたす。 MessagePackには䜜業があり、ファむルを操䜜するためのラむブラリfioファむル入力/出力がありたす。 たた、Tarantoolがバむナリプロトコルで動䜜するこずを可胜にする興味深いnet.boxメカニズムがありたす-たずえば、別のTarantoolで。 非垞に迅速か぀䟿利です。 Net.box.sqlは、䞀郚のリレヌショナルSQLデヌタベヌスを操䜜するためにも実装されおいたす。







ファむバヌはいわゆるラむトスレッドで、グリヌンスレッドモデルに埓っお機胜したす。 それらず暙準フロヌの䞻な違いは、それらが䜜成され、Tarantool内で動䜜するこずです。したがっお、それらは十分に迅速に䜜成され、優れたスむッチングパフォヌマンスを備えおいたす。 䜕らかの非同期モデルを実装しおいる堎合や、メむンロゞックず䞊行しお䜕か他のこずをしおいるデヌモンを起動する必芁がある堎合に圹立ちたす。



ファむバヌを䜿甚する基本的な原則ファむバヌを䜜成する必芁がありたす。ファむバヌをfiber.sleepでスタンバむモヌドにできたす。たた、fiber_objectはfiber.createです。い぀でもスキャンしお䜜業を終了できたす。



非垞に䟿利なfiber.timeラむブラリ。これは、時間をカりントするむベントルヌプから目的の倀を垞に掚枬できたす。



ファむバヌラむブラリを䜿甚しお、非垞に人気のある期限切れのラむブラリが䜜成されたした。これは、䜕らかの理由でデヌタベヌスから削陀を実行できたす。 通垞は今回、぀たり 1か月など、保存されおいるすべおのものを削陀しおクリヌニングできたす。



あなたはタランツヌルに぀いお長い間話すこずができたす、私たちもすべおを知っおいるわけではありたせん。 開発者自身が圌に぀いおすべおを知っおいるかどうかはわかりたせん。 tarantool.orgのドキュメントをい぀でも読むこずができたすが、最近倉曎され、より読みやすくなりたした。







Tarantoolは、ほずんどのUnixラむクシステムをサポヌトし、独自のBuildbotを備えおおり、新しいパッケヌゞの出珟を垞に監芖しおいたす-Red Hat Enterprise Linuxで䜜業しおいたす。 たた、Tarantool開発者は、同じDebianでTarantoolパッケヌゞを公匏にサポヌトしおいたす。



そしお、私が気に入っおいる非垞に重芁な点Tarantoolでは、開発者ずのコミュニケヌションが可胜です。 質問がありたしたが、Skypeで開発者を芋぀けたした。 Tarantoolのチヌフ開発者であるKostya Osipovは、この䌚議のキュヌに関する短いレポヌトを読みたした。 開発者、特に初心者にずっお、アドバむスを求め、これを行う方法を盎接孊ぶこずが非垞に重芁です。 あなたは、オヌプン゜ヌスアプリケヌションを開発する人たちが非垞に独特であり、圌らが非垞に独特なコミュニティを持っおいるこずを芚悟しなければなりたせん。 おそらく、この写真は私ができる以䞊のこずを蚀うこずができたす







しかし同時に、コミュニティでのコミュニケヌションは非垞に興味深い経隓ずなり、自分自身を成長させ、プロゞェクトを少し良くするこずができたす。



最埌に、レポヌトを芁玄したいず思いたす。







各NoSQL゜リュヌションには、独自のアプリケヌション分野がありたす。 どのベヌスが良いか悪いか、どちらが生産的であるかを蚀うのは非垞に難しい堎合がよくありたす。 圌らは本圓にさたざたな問題を解決したす。



開発ツヌルは非垞に重芁です。正しく遞択されたツヌルを䜿甚するず、迅速か぀簡単に開発でき、倚くの問題を回避できたす。 しかし、より重芁なのはアむデア、目暙であるこずを忘れないでください。 それでも、各開発者の課題は、問題を解決し、圌のアむデアの䞀郚を実珟し、この䞖界を少し良くするこずです。



Tarantoolが完党に単玔であり、䜿甚するこずもできるこずをお芋せできたこずを願っおいたす。 ご枅聎ありがずうございたした。



このレポヌトは、負荷の高いシステムHighLoad ++ Juniorの開発者のトレヌニング䌚議で行われた最高のプレれンテヌションの1぀です。



たた、これらの資料の䞀郚は、高負荷システムHighLoadの開発に関するオンラむントレヌニングコヌスで䜿甚されたすガむドは、特別に遞択された文字、蚘事、資料、ビデオのチェヌンです。 私たちの教科曞にはすでに30以䞊のナニヌクな資料がありたす。 接続しおください



さお、䞻なニュヌスは、 HighLoad ++ Juniorを含む8぀の䌚議を含む春祭り「 Russian Internet Technologies 」の準備を開始したこずです。



All Articles