GovnokodからHighloadぞ。 TARANtoolを䜿甚したす。 5぀のレシピの生産性

私は、プロゞェクトのパフォヌマンスを向䞊するための芁求で起動゜ヌシャルゲヌムのディレクタヌによっお近づかれたした。 この段階で、プロトタむププロゞェクトが䜜成され、開始されたした。 そしお、プロゞェクトが機胜し、ある皮の利益をもたらした開発者に敬意を衚さなければなりたせん。 しかし、プロゞェクトが負荷に耐えられなかったため、広告䌚瀟を立ち䞊げるこずは意味がありたせんでした。 MySQLが萜ちたした゚ラヌの35。



プロゞェクトコヌド...䞀般に、圌の孊歎の䜎い孊生が曞いたような印象がありたした...そしお、これは、別のプログラマヌによる郚分的なリファクタリングが既に行われおいるずいう事実にもかかわらず。 喜んだ唯䞀のこずは、フレヌムワヌクが䜿甚されなかったこずです。 もちろん、それは垞にむ゚スやモハメッドfleymovy質問ですか であるこず、たたはではありたせんか UnixたたはWindows 䜿甚するかしないか 私芋、私の意芋フレヌムワヌクは兞型的なタスクの狭い円のために研ぎ柄たされおいたす。 ゜ヌシャルプロゞェクトは通垞、兞型的なタスクではありたせん...しかし、䞀般的に、プロゞェクトは私にずっお面癜そうに思えたので、改善に取り組むこずにしたした。 この゚ントリでは、完了するこずができたす...



おそらく、この分野で少なくずも䜕かを知っおいる怠zyなWEB開発者だけが、パフォヌマンスの向䞊ず高負荷のトピックに぀いお曞いおいたせん。 基本的に、新しい䜕かが、この蚘事では、あなたは芋぀けるこずができたせん。 高負荷プロゞェクトを開発するための䞻なアむデアは、䞀連のHighLoad蚘事で抂説されおいたす。 3頭のクゞラ。 。 NoSQL tarantoolリポゞトリを䜿甚しおPHPプロゞェクトの生産性を向䞊させる方法に興味がある堎合は、catにようこそ。



原則ずしお、この範囲のタスクに適した別のキヌ、倀のストレヌゞ、およびサヌバヌロゞックの実装は、他のスクリプト蚀語でも䜿甚できたす。



レシピ1.コヌドを分析


すべおが恐ろしく汚い。 圌らは私の前にこの䜕癟回も曞いおおり、さらに䜕癟もの蚘事が曞かれたす...しかし、「私たちは最も賢い」ず同じ熊手を着実に螏んでいたす。 すべおのWEBプロゞェクトの99のボトルネックがデヌタベヌスであるず蚀っおも、アメリカを発芋するこずはできたせん。 そしお、これのうちどれを結論付ける必芁がありたすか

そうです- ク゚リの数を最小限に抑える必芁がありたす。 。 そしお、どのようにロゞックの過皋で5回コヌドを満たしおいる堎合、それを行うには



$ナヌザ = 新しいナヌザヌ;

$ userData = $ user- > getById  $ uid  ;


ク゚リのプロファむリング時に、5぀の同䞀の「遞択」を実行したこずがわかりたす。SELECT * FROM users WHERE id = $ uid;

これは非垞に簡単に実装されたす。内郚プラむベヌト静的フィヌルドたたはUserオブゞェクトのプロパティを䜿甚したす。

クラスナヌザヌ {



プラむベヌト静的$のuserData = NULL;



プラむベヌト 関数 getById_loc  $ uid  {

デヌタベヌスにアクセスするためのいく぀かのコヌドを//。

}



パブリック 関数 getById  $ uid  {

if  self :: $ userData  return self :: $ userData ;

self :: $ userData = $ this- > getById_loc  $ uid  ;

自己を 返す :: $ のuserData。

}

}




すぐに目を匕くのは2番目です。 これは、2぀の方法が近くにある堎合です。

$ User- > updateBalance  $ sum  ;

$ User- > updateRating  $ rating  ;



これにより、連続しお1぀のテヌブルに察しお2぀のク゚リが実行されたす。

UPDATEナヌザヌのSETバランス=バランス+ $の合蚈WHERE ID = $のUID。

UPDATEナヌザヌSET rating = $ rating WHERE id = $ uid;

ただし、頭を少し動かせば、1぀のリク゚ストを䜜成できたす。

ナヌザヌセットの 曎新

バランス=バランス+ $ 和、

評䟡= $評䟡

ID = $のUID。



これは2぀の方法で行うこずができたす別のメ゜ッド$ user-> updateBalanceAndRating$ sum、$ ratingを曞くか、すべおの堎面で圌らが蚀うように普遍的な䜕かを実装したす

$ナヌザ- > updateFieldAdd 'バランス '、$合蚈。 //フィヌルドを蚘憶し、操䜜を远加-远加、オペランド

$ナヌザ- > updateFieldAssign '評䟡 '、$定栌。 //フィヌルド、割り圓お操䜜-割り圓お、オペランドを蚘憶したす

$ user- > execUpdate   ; //リク゚ストを䜜成しお実行したす




これらの2぀の簡単な方法の唯䞀の導入は10-12 3から5にデヌタベヌスク゚リの数を削枛するこずが可胜ずなりたした。 しかし、正盎なずころ、ただ既存のコヌドやリファクタリングリファクタリングがありたす。 もちろん、ほずんどのHabrousersは敗者ずはほど遠いですが、プロファむリングず分析は垞に「神が私たちを助けおくれたす」。



レシピ2.キャッシング


キャッシングずは䜕ですか、散らばる必芁はありたせん。 Dima Koterovが高負荷プロゞェクトの開発に関する蚘事で曞いたように、「できる限りすべおをキャッシュする必芁がありたす。」 このプロゞェクトでは、ある皮のキャッシングのti病な詊みがありたした。 しかし、Chernomyrdinによるず、すべおが刀明したした。圌らは、最も頻繁に䜿甚されるものではなく、最高のものを望みたしたが、キャッシュしたした。



䞊蚘otmechenonoように、デヌタベヌスの負荷を軜枛するためには、リク゚ストの数を䜎枛する必芁がありたす。 そしお、それらを枛らす方法は はい、それは非垞に簡単です-たずえば、蚭定で、デヌタベヌスから䞍倉デヌタの䞀郚ナニット、トリビュヌト、歊噚のマニュアルを簡単に削陀できたす。 構成はXMLであり、任意のXML゚ディタヌでゲヌムプレむチヌムの女の子が線集するか、完成した圢匏PHP配列で線集できたす-ゲヌムプレむずコヌドの開発者が1人の堎合。 その堎でParsingXMLを実行するのは難しいので、予備的なXSLT倉換を盎接PHPコヌドにメむンコヌドず共に読み蟌たれる連想配列の圢匏で行いたす。 ただし、XML構成ファむルを倉曎するたびに、XSLT倉換スクリプトたたはコン゜ヌルナヌティリティを実行する必芁がありたす。 はい、これはキャッシングではありたせん。これはわずかな改善であり、別のレシピずしお割り圓おるこずはできたせんが、忘れないでください。



したがっお、すべおのディレクトリを構成に詰め蟌んだので、さらにいく぀かのク゚リから解攟されたす。 たあ、䜕-それは簡単になりたしたか..少なくずもレシピ1ず2を適甚した埌、ベヌスは萜ちなくなりたした。 たあ、少なくずもいく぀かの結果...



レシピ3.デヌタ分析


ここであなたは本圓にコヌドを分析し、考えなければなりたせん...そしお、ずころで、䜕かがありたす...ナヌザヌがどのデヌタを倉曎し、どのナヌザヌデヌタが倉曎されず、最も頻繁に芁求されるのかを知る必芁がありたす。 ここでは、芖芚的にコヌドを実行し、プロゞェクトのロゞックを理解するこずが必芁です。



私たちのプロゞェクトで最も頻繁にリク゚ストされた情報は、ナヌザヌのゲヌムプロフィヌル、ギフト、賞です。 このデヌタはすべおNoSQLストレヌゞに配眮され、他のすべおのデヌタ、特に支払いに関連するデヌタはMySQLに残りたした。 NoSQLリポゞトリずしお、tarantoolが遞択されたした。



そしおただ-なぜTARANtoolなのか


Highload ++ Conference 2011では、Tarantool開発マネヌゞャヌのKostya Osipovaに次の質問がありたした。

-なぜあなたの名前はそんなに有毒ですか

-たあ、あなたは名前をラムずツヌル、぀たり プロゞェクトを突っ蟌むためのツヌルツヌルずしお。



したがっお、NoSQLストレヌゞの遞択に圱響する芁因は次のずおりです。

-サポヌトずコンサルティングを玄束したKostya Osipovプロゞェクトのチヌムリヌダヌずの個人的な知り合い

-以前のプロゞェクトでこのリポゞトリを実装した経隓。 残念なこずに、プロゞェクトは:(を離陞したせんでしたが、興味深いものでした。

- 2幎近くその前䜿甚埌に、新たな機䌚をtarantoolを探りたす

-このNoSQLストレヌゞの高いパフォヌマンスず高いデヌタ可甚性。

-デヌタの氞続性。ディスクにドロップされた堎合、垞に発生する可胜性のある実際のコピヌがありたす。

-さお、あたり控えめではないが、私自身はTarantoolのPHP拡匵の最初のバヌゞョンの䜜成者なので、必芁に応じお䜕かにパッチを圓おたり、バグを修正したりできたす。



しかし、より深刻なこずに、このNoSQLデヌタりェアハりスのナニヌクな機胜が気に入っおいたす。セカンダリキヌを䜿甚し、ストアドプロシヌゞャを䜿甚しおサヌバヌ偎でデヌタ領域を操䜜したす。



デヌタ分析続き


ナヌザヌプロファむル、ナヌザヌテヌブルに぀いお考えたす。 可倉および可倉のデヌタがありたす。 可倉デヌタには、バランス、評䟡、pvpポむント、単䜍、チュヌトリアルステップなどが含たれたす。

倉曎䞍可胜なデヌタには、social_id、ログむン、アバタヌurl、個人コヌドなどが含たれたす。可倉デヌタの䞭には、倚くの堎合、可倉でほずんど倉曎されたせん。 ただし、䞍揮発性デヌタが頻繁に芁求される堎合がありたす。



頻繁に芁求されるデヌタを匷調衚瀺したす。 それらをtarantoolにキャッシュしたす。 NoSQLストレヌゞ自䜓に぀いお少し説明したす...



TARANtool。 シノプシス


Tarantoolは、䞊蚘のように、高性胜なキヌ/バリュヌNoSQLストレヌゞです。 すべおのデヌタはRAM内にあり、タプルの圢匏で衚瀺されるため、それらの抜出速床はredisに劣ったり、わずかに遅い1000操䜜あたり6〜7ミリ秒memcachedです。



それでも、Tarantoolはデヌタりェアハりスであり、memcacheなどのメモリ内のキャッシュシステムではないこずに泚意しおください。 すべおのデヌタはRAMにありたすが、ファむルスナップショット0000..01.snapに垞に保存されたす同期システムコヌルから同期されたす。 埓来のmemcachedおよびredisずは異なり、tarantoolには远加機胜がありたす。

-デヌタにセカンダリむンデックスをオヌバヌレむする機胜

-むンデックスは合成可胜

-むンデックスのタむプは、HASH、TREE、たたはBITSETです。 GEOむンデックスの導入が蚈画されおいたす。

-1぀以䞊のむンデックスの同時サンプリング。

-郚分的なデヌタ抜出LIMIT / OFFSETのアナログ。



Tarantoolは、スペヌスに結合されたデヌタを操䜜したす。 スペヌスはMySQLのテヌブルに類䌌しおいたす。 Tarantoolは、デゞタルスペヌス番号0、1、2、3 ...を䜿甚したす。 近い将来、ネヌムスペヌスMySQLのテヌブル名の類䌌物を䜿甚する予定です。



各スペヌスにむンデックスを重ねるこずができたす。 むンデックスは、数倀int32たたはint64ず文字フィヌルドの䞡方に重ね合わせるこずができたす。 スペヌスず同様に、tarantoolはデゞタルむンデックスの番号付けを定矩したす。



クラむアントずサヌバヌのタプル間の亀換。 è¡šMySQLでアナログ回線をKortezh-。 数孊では、車列の抂念 - 長さnの順序付き有限集合。 タプルの各芁玠は、 デヌタ芁玠たたはフィヌルドを衚したす。 基本的に、タランチュラはフィヌルドのデヌタ型を区別したせん。 圌にずっお、これは䞀連のバむトです。 しかし、むンデックスを䜿甚する堎合、぀たり このフィヌルドにむンデックスを課す堎合、そのタむプはフィヌルドのタむプず䞀臎する必芁がありたす。 タプルには別の名前がありたすtuple。



すべおのむンデックスは、人間の知芚であるYAMLずいう蚭定に登録されたす。 蚭定の䞀郚の䟋

スペヌス[ 0 ] .enabled = 1

スペヌス[ 0 ] .index [ 0 ] 。 タむプ = "HASH"

space [ 0 ] .index [ 0 ] .unique = 1

スペヌス[0] .INDEX [0] [0] .fieldno = 0を .key_field

スペヌス[ 0 ] .index [ 0 ] .key_field [ 0 ] 。 タむプ = "NUM"

構成では、各スペヌスのプラむマリむンデックスずセカンダリむンデックスを蚘述したす。 PRIMARY KEYのみで遞択する堎合、プラむマリむンデックスのみの説明で十分です䞊蚘の䟋を参照。 ナヌザヌ間のレヌティングたたはpvpバトルで最適なものを遞択する堎合、これらのフィヌルドにセカンダリむンデックスを課したす。 第2のフィヌルドがむンデックスされおみたしょうfieldno = 1、れロから数えおint32_t - 評䟡



スペヌス[ 0 ] .index [ 1 ] 。 タむプ =「TREE」は //あなたがより少ない操䜜をサンプリングするこずを可胜にするタむプ・ツリヌを、䜜りたす

space [ 0 ] .index [ 1 ] .unique = 0 //独創性を削陀

space [ 0 ] .index [ 1 ] .key_field [ 0 ] .fieldno = 1 //むンデックス付きフィヌルドの番号を瀺したす

スペヌス[ 0 ] .index [ 1 ] .key_field [ 0 ] 。 type = "NUM" // int32_tず入力



Social Gameプロゞェクトがあるため、䞻キヌはsocial_idに察応したす。 ほずんどの゜ヌシャルネットワヌクでは、これは64キヌです。 むンデックスタむプはHASHになり、デヌタタむプはSTRになりたす。 理想的にはNUM64が欲しいのですが、残念ながらPHPはlong long型ではうたく機胜したせん。 ドラむバヌは、䜿甚されおいるスペヌスの䞻キヌのタむプずサむズを認識したせん。 珟時点では、64ビットキヌを䜿甚しおいる堎合、32ビット倀を䜿甚しお怜玢するこずはできたせん。 これは、64ビットのキヌずしおパッケヌゞに梱包されなければなりたせん。 珟圚、ドラむバヌは、倀が32ビットの範囲を超えおいる堎合にのみこれを行いたす。 したがっお、タむプSTRINGを䜿甚する方が信頌性が高くなりたす。



メモリ蚈算


tarantoolはメモリのみの゜リュヌションであるため、䜿甚されるRAMの掚定量を蚈算するこずが重芁です。 蚈算は次のずおりです。



各タプルの前に、varint型の倉数パック内のperl 'w'のアナログず各タプルのヘッダヌから12バむトが栌玍されたす。 具䜓的には、デヌタに぀いおは、 プロトコルを調べるか、 Tarantool Data and Protocolの蚘事を読むこずで芋぀けるこずができたす。



さらに、玄15がアロケヌタヌのデヌタで占有されおいたす。 たずえば、10個のフィヌルドがあり、ナヌザヌデヌタのサむズが256バむトに収たる堎合、1.5Mの堎合、およそ次の蚈算が行われたす。

10 * 1 + 256 + 12* 1.15 * 1 500 000 = 921150000〜= 440 Mb /日



同様に、メモリ内のすべおのむンデックス、保持しおいたす

-ツリヌ内の1぀のノヌドには、68バむトのサヌビス情報が栌玍されたす

-1぀のノヌドに぀いお、56バむトのオヌバヌヘッド情報がハッシュに保存されたす



150䞇人のナヌザヌにむンデックスを保存するには、合蚈で80Mbを超えるだけで十分で、1.5Mのプロファむルを保存するのに、わずかに半分ギガバむトが必芁になりたす。 我々は別のキヌタむプTREEを远加した堎合、それはさらに90MのRAMです。



そのような人がいたすが、今日の基準では、それほど倚くはありたせん。



レシピ4.フォアグラりンドでMySQLを取り陀く


すでに述べたように、ナヌザヌプロファむルデヌタをtarantoolに転送するずき、珟圚のコピヌをMySQLに保持したいず考えおいたす。 したがっお、UPDATEに関連するすべおの操䜜を実行する必芁がありたす。 その結果、キャッシングを行っおも、あたり達成できたせんでした。 しかし、圌らはただ䞻な効果を達成したしたMySQLは萜ちなくなりたした。 それでは、どうすればスクリプトを数回高速化できたすか これは、MySQLク゚リをたったく削陀する堎合に可胜です。 これはどのように可胜ですか デヌタベヌスぞの倉曎に関する情報を、INSERT / UPDATE操䜜を実行する他のバックグラりンドスクリプトに転送する必芁がありたす。



この情報はキュヌを介しお送信されたす。 リモヌトタスクの実行を可胜にするいく぀かの産業甚゜リュヌションがありたす。Gaerman、Celery、およびRabbitMQ、ZMQ、redis、その他のキュヌサヌバヌを適応させるこずもできたす。 キュヌサヌバがtarantool䜿甚するこずができた堎合でも、なぜ、プロゞェクトにいく぀かの新しい゚ンティティを玹介。



タランチュラにはgithub.com/mailru/tntlua/blob/master/queue.luaキュヌの実装があり、䜿甚するこずをお勧めしたす。

ただし、少し簡単に実装されたした。 新しいスペヌスを䜜成したす。



space [ 1 ] .enabled = 1

space [ 1 ] .index [ 0 ] 。 タむプ = 「TREE」

space [ 1 ] .index [ 0 ] .unique = 1

スペヌス[1] .INDEX [0] [0] .fieldno = 0を .key_field

space [ 1 ] .index [ 0 ] .key_field [ 0 ] 。 タむプ = "NUM"





このスペヌスでは、次のフィヌルドを蚘述したす。

-id、自動むンクリメントフィヌルド。 むンデックスが必芁です。 タむプTREEのプラむマリむンデックスがスヌパヌむンポヌズされたす。

-type-操䜜のタむプ、SQL挔算子のパタヌン番号を決定する数倀定数。

-デヌタ-挿入/曎新するデヌタ。



前景スクリプトには次のコヌドが含たれたす。

define  'UPDATE_SPIN_COUNT' 、 1  ;

define  'UPDATE_USER_BALANCE' 、 2  ;

...

$ res = $ tnt- > call  'box.auto_increment' 、array   string  TBL_QUEUES 、 UPDATE_SPIN_COUNT 、$ spinCount、$ uid   ;

ストアドプロシヌゞャbox.auto_incrementは組み蟌みであり、タプルデヌタを挿入したす;䞻キヌの倀はmax + 1です。パラメヌタヌ

-デヌタが挿入されるスペヌスの数

-デヌタ自䜓

-オプションのフラグパラメヌタ、デフォルトでは「return new key」に蚭定

倉数の型であるスペヌスの数定数TBL_QUEUES は、 STRING型にキャストする必芁があるこずに泚意しおください。 このスクリプトは、FIAキュヌにデヌタを曞き蟌むluaプロシヌゞャを呌び出したす自動むンクリメント番号、実行䞭のタスクのタむプ、およびデヌタ自䜓。



次に、別のリモヌトマシン䞊でも実行できるバックグラりンドスクリプトがキュヌからデヌタを取埗し、SQLを実行したす。



define  'UPDATE_SPIN_COUNT' 、 1  ;

define  'UPDATE_USER_BALANCE' 、 2  ;

...

$ res = $ this- > callProc  'my_pop' 、array   string  TBL_QUEUES   ;



/ *

空の堎合は以䞋を返したす

配列 2  {

[ "count" ] => int  0 

[ "tuples_list" ] =>配列 0  { }

}



* /

もし$ RES [ 'count'ずいう ]のリタヌン;



$ tuple = $ res [ 'tuples_list' ] [ 0 ] ;

switch  $ tuple [ 1 ]  {

ケヌスUPDATE_SPIN_COUNT

$ sql = "UPDATE users SET spinCount = {$ tuple [2]} WHERE uid = {$ tuple [3]}" ;

䌑憩 ;



ケヌスUPDATE_USER_BALANCE 

$ sql = "UPDATE users SET money = money + {$ tuple [2]} WHERE uid = {$ tuple [3]}" ;

䌑憩 ;



デフォルト

新しい䟋倖「unknowタスクの皮類を投げたす 」;

䌑憩 ;

}



の$ this - > ExecSqlの$ sqlを ;




その結果、フロント゚ンドスクリプトは高速のタランチュラでのみ動䜜し、バックグラりンドスクリプトはデヌモンずしおハングするか、クラりンで実行され、WEBサヌバヌのリ゜ヌスを無駄にするこずなくMySQLのデヌタを別のサヌバヌに保存したす。 その結果、生産性で30以䞊勝぀こずができたす。 バックグラりンドスクリプトのテヌマは別の蚘事に倀したす。



ただし、これだけではありたせん。 luaプロシヌゞャmy_popを開始するには、初期化する必芁がありたす。 これを行うには、次のコヌドをinit.luaファむルに配眮し、work_dirたたはscript_dirに配眮する必芁がありたす。



関数 my_pop  spaceno 

spaceno = tonumber  spaceno 

local min_tuple = box.space [ spaceno ] .index [ 0 ] .idx min  

ロヌカル 最小 = 0

min_tuple〜 = nilの 堎合

最小 =ボックス。 アンパック  'i' 、min_tuple [ 0 ] 

他に

åž°ã‚‹

終わり



ロヌカル ret = box.select  spaceno、 0 、 min 

box.delete  spaceno、 min 



戻る



終わり




work_dirの倀は、tarantool.confで指定されたす。



レシピ5.アクティブに再生されおいるプロファむルのみをキャッシュする


既に以前に実装したように、すべおのプロファむルはtarantoolに保存され、バックグラりンドスクリプトによっお行われたすべおの倉曎はMySQLに蚘録されたす。 CAP定理に埓っお、少し遅れお関連デヌタが垞にありたす。



しかし、プロゞェクトが150䞇人だけでなく300䞇人たたは500䞇人のナヌザヌを獲埗した堎合はどうでしょうか。 ナヌザヌがログむンし、ゲヌムは奜きではなかった-巊。 しかし、タランチュラのデヌタは残り、メモリを占有し、䜿甚されたせん...したがっお、より効率的に䜿甚し、より高速なデヌタ怜玢のために、垞にプレむしおいるナヌザヌのみを保存するのが理にかなっおいたす。



぀たり、プレむしおいないナヌザヌ、぀たり 私たちは、䟋えば、䞀週間以䞊、運甚キャッシュから削陀するこずができ、遊びに来たせんでした。 デヌタベヌスに実際のコピヌがあるため、い぀でも操䜜可胜なキャッシュに埩元できたす。 オンラむンキャッシュを䜿甚するクラスのコヌドは、キャッシュの暙準タむプに埓っお構築されたす。



クラス User は DbModelを拡匵したす{



パブリック 関数 getByUid$の UID{



$ result = this- > getFromCache  $ uid  ;



もしIS_NULL$結果 {

return $ result ;

}



$ result = $ this- > execSQL  "SELECT * FROM users WHERE uid = $ uid "  ;

$ this- > setToCache  $ result  ;



return $ result ;

}

....

}




それをきれいにするいく぀かの方法がありたす

-スクリプトを䜿甚しおデヌタベヌスからすべおの「期限切れ」レコヌドのリストを遞択し、タランチュラでそれらを削陀したす

-タランチュラにクリヌニングブロヌカヌを蚭定したした圌は自分でやらなかった github.com/mailru/tarantool/wiki/Brokers-ru

-すべおの「期限切れ」レコヌドを削陀し、クラりンで呌び出しを実行するために、luaでストアドプロシヌゞャを蚘述したす。



すべおのデヌタタプルがディスクからRAMにレむズされるのではなく、最も芁求の倚いデヌタのみがレむズされるように、開発チヌムからの新しいタむプのストレヌゞを楜しみにしおいたす。 おおよそ、Mongo DBのように。 その埌、レシピ5は自動的に消えたす。



結論の代わりに


䞊蚘はすべお、゜ヌシャルプロゞェクトが実装されおいる任意の蚀語PHP、Perl、Python、Ruby、Javaで実装できたす。

NoSQLデヌタストアずしお運甚キャッシュは、次の品皮の任意のキヌ/倀ストアに近づくこずができたす。

-memcached、氞続性はなく、キュヌの実装に頭を悩たせる必芁がありたすが、これはAPPEND操䜜を䜿甚しお解決できたす

- MemBase倀ではなく、非垞に優れた開発ず、そのクリ゚むタヌによっおサポヌトされなくなっおいるように芋えたした

- memcacheDbmemcacheQの束

-倧根、基本的にこの機胜を実装するすべおがありたす

- TokyoTyrant、KyotoTyrant - 基本的にキュヌのlua手順で実斜するこずができたす

-LevelDb Daemon、マンバ人のたずもな開発。 小さなフィニッシュずキュヌはすでにポケットに入っおいたす。

-コメントで䜕かを提䟛する



さお、結論ずしお、ナシや少しPRに぀いお少し。

悪魔、具䜓的には可胜なタスク、盞互䜜甚、実装の埮劙さに぀いおは、「DevConf 2013」「 ゜ヌシャルゲヌムのPHP悪魔 」でお話しする予定です。 たた、完了したプロゞェクトの生産性を向䞊させるいく぀かの機胜を匷調しおいたす。 興味深い堎合は、タランチュラのトピックに觊れたすこのため投祚を䜿甚したした。では、DevConf 2013でお䌚いしたしょう。



PS。 すでに倜の3時間目、achapotkiは可胜です...プラむベヌトでpliiiz-私はすぐに修正したす。 事前に感謝したす。



All Articles