کیساندرا څنګه مړ نشي که تاسو یوازې اوریکل پیژنئ

اې حبر

زما نوم میشا بټریموف دی، زه غواړم تاسو ته د کیسندرا په اړه لږ څه ووایم. زما کیسه به د هغو کسانو لپاره ګټوره وي چې هیڅکله یې د NoSQL ډیټابیسونو سره مخ شوي ندي - دا د پلي کولو ډیری ځانګړتیاوې او زیانونه لري چې تاسو یې په اړه پوهیدلو ته اړتیا لرئ. او که تاسو د اوریکل یا کوم بل اړوند ډیټابیس پرته بل څه ندي لیدلي ، دا شیان به ستاسو ژوند وژغوري.

د Cassandra په اړه څه ښه دي؟ دا د NoSQL ډیټابیس دی چې د ناکامۍ یوې نقطې پرته ډیزاین شوی چې ښه اندازه کوي. که تاسو اړتیا لرئ د ځینې ډیټابیس لپاره یو څو ټیرابایټ اضافه کړئ ، تاسو په ساده ډول حلقې ته نوډونه اضافه کړئ. دا بل ډیټا مرکز ته پراخ کړئ؟ کلستر ته نوډونه اضافه کړئ. پروسس شوي RPS زیات کړئ؟ کلستر ته نوډونه اضافه کړئ. دا په مخالف لوري کې هم کار کوي.

کیساندرا څنګه مړ نشي که تاسو یوازې اوریکل پیژنئ

هغه په ​​بل څه کې ښه ده؟ دا د ډیری غوښتنو اداره کولو په اړه ده. مګر څومره ډیر دی؟ په هره ثانیه کې 10، 20، 30، 40 زره غوښتنې ډیرې ندي. د ثبت کولو لپاره په هره ثانیه کې 100 زره غوښتنې - هم. داسې شرکتونه شتون لري چې ویلي یې دي دوی په هره ثانیه کې 2 ملیون غوښتنې ساتي. دوی به شاید باور ولري.

او په اصولو کې، کیسیندرا د اړونده معلوماتو څخه یو لوی توپیر لري - دا د دوی سره ورته نه دی. او دا د یادولو لپاره خورا مهم دی.

هر څه چې ورته ښکاري یو شان کار نه کوي

یوځل یو همکار ماته راغی او پوښتنه یې وکړه: "دلته د CQL کیسندرا پوښتنې ژبه ده ، او دا یو غوره بیان لري ، دا چیرې لري ، دا لري او. زه لیکونه لیکم او دا کار نه کوي. ولې؟". د اړونده ډیټابیس په څیر د کاسندرا درملنه د تاوتریخوالی ځان وژنې غوره لاره ده. او زه یې نه هڅوم، دا په روسیه کې منع دی. تاسو به یوازې یو څه غلط ډیزاین کړئ.

د مثال په توګه، یو پیرودونکی موږ ته راځي او وايي: "راځئ د تلویزیون لړۍ لپاره ډیټابیس جوړ کړو، یا د ترکیب لارښود لپاره ډیټابیس. موږ به هلته د خواړو لوښي یا د تلویزیون سریالونو او اداکارانو لیست ولرو. موږ په خوښۍ سره وایو: "راځئ!" یوازې دوه بایټونه واستوئ ، یو څو نښې او تاسو بشپړ شوي ، هرڅه به خورا ګړندي او د اعتماد سره کار وکړي. او هرڅه سم دي تر هغه چې پیرودونکي راشي او ووایی چې د کور میرمنې هم د برعکس ستونزه حل کوي: دوی د محصولاتو لیست لري، او دوی غواړي پوه شي چې دوی کوم خواړه پخوي. تاسو مړه یاست.

دا ځکه چې کاسندرا یو هایبرډ ډیټابیس دی: دا په ورته وخت کې کلیدي ارزښت چمتو کوي او په پراخه کالمونو کې ډیټا ذخیره کوي. په جاوا یا کوټلین کې، دا د دې په څیر تشریح کیدی شي:

Map<RowKey, SortedMap<ColumnKey, ColumnValue>>

دا، یوه نقشه چې ترتیب شوې نقشه هم لري. د دې نقشې لومړۍ کیلي د قطار کیلي یا د برخې کیلي - د برخې کولو کیلي ده. دویمه کیلي، کوم چې د مخکې ترتیب شوي نقشې کلیدي ده، د کلستر کولو کیلي ده.

د ډیټابیس د توزیع روښانه کولو لپاره، راځئ چې درې نوډونه رسم کړو. اوس تاسو اړتیا لرئ پوه شئ چې څنګه ډاټا په نوډونو کې تخریب کړئ. ځکه چې که موږ هر څه په یو کې راټیټ کړو (په لاره کې، یو زره، دوه زره، پنځه - څومره چې تاسو یې غواړئ)، دا واقعیا د ویش په اړه ندي. له همدې امله، موږ یو ریاضياتي فعالیت ته اړتیا لرو چې یو شمیر بیرته راولي. یوازې یوه شمیره، یو اوږد int چې په یو حد کې به راشي. او موږ به یو نوډ د یوې سلسلې لپاره مسؤل وي ، دوهم د دوهم لپاره ، نهم د nth لپاره.

کیساندرا څنګه مړ نشي که تاسو یوازې اوریکل پیژنئ

دا شمیره د هش فنکشن په کارولو سره اخیستل کیږي، کوم چې په هغه څه پلي کیږي چې موږ یې د Partition کیلي بولو. دا هغه کالم دی چې د لومړني کلیدي لارښود کې مشخص شوی، او دا هغه کالم دی چې د نقشې لومړنۍ او خورا اساسي کلیدي وي. دا ټاکي چې کوم نوډ به کوم معلومات ترلاسه کړي. یو جدول په کاسندرا کې د ورته ترکیب سره رامینځته شوی لکه په SQL کې:

CREATE TABLE users (
	user_id uu id,
	name text,
	year int,
	salary float,
	PRIMARY KEY(user_id)

)

په دې حالت کې لومړنۍ کیلي یو کالم لري، او دا د ویشلو کیلي هم ده.

زموږ کاروونکي به څنګه ترسره کړي؟ ځینې ​​به یو نوډ ته ځي، ځینې به بل ته، او ځینې به دریم ته. پایله یو عادي هش میز دی، چې د نقشې په نوم هم پیژندل کیږي، په Python کې د لغت په نوم هم پیژندل کیږي، یا د ساده کلیدي ارزښت جوړښت چې موږ کولی شو ټول ارزښتونه ولولو، د کیلي په واسطه ولولئ او ولیکئ.

کیساندرا څنګه مړ نشي که تاسو یوازې اوریکل پیژنئ

غوره کړئ: کله چې فلټر کولو ته اجازه ورکړئ په بشپړ سکین بدل شي ، یا څه باید ونه کړئ

راځئ چې ځینې غوره بیانونه ولیکئ: select * from users where, userid = . دا د اوریکل په څیر وګرځي: موږ انتخاب لیکو ، شرایط مشخص کوو او هرڅه کار کوي ، کارونکي یې ترلاسه کوي. مګر که تاسو غوره کړئ، د بیلګې په توګه، یو کارن چې د زیږون یو ټاکلی کال لري، کیسندرا شکایت کوي چې دا غوښتنه نشي پوره کولی. ځکه چې هغه په ​​​​دې اړه هیڅ نه پوهیږي چې څنګه موږ د زیږون کال په اړه معلومات توزیع کوو - هغه یوازې یو کالم لري چې د کیلي په توګه اشاره شوې. بیا هغه وايي: "ښه، زه لاهم کولی شم دا غوښتنه پوره کړم. د فلټر کولو اجازه اضافه کړئ." موږ لارښود اضافه کوو، هرڅه کار کوي. او پدې وخت کې یو څه ناوړه پیښیږي.

کله چې موږ د ازموینې ډاټا پرمخ وړو، هرڅه سم دي. او کله چې تاسو په تولید کې یوه پوښتنه اجرا کوئ ، چیرې چې موږ لرو ، د مثال په توګه ، 4 ملیون ریکارډونه ، نو هرڅه زموږ لپاره خورا ښه ندي. ځکه چې د فلټر کولو اجازه ورکول یو لارښود دی چې کاسندرا ته اجازه ورکوي چې د دې جدول څخه ټول معلومات د ټولو نوډونو څخه راټول کړي ، د ټولو ډیټا مرکزونو (که چیرې پدې کلستر کې ډیری شتون ولري) ، او یوازې بیا یې فلټر کړئ. دا د بشپړ سکین انلاګ دی، او په سختۍ سره هرڅوک له دې څخه خوښ وي.

که موږ یوازې د ID لخوا کاروونکو ته اړتیا ولرو، موږ به د دې سره ښه یو. مګر ځینې وختونه موږ اړتیا لرو چې نورې پوښتنې ولیکئ او په انتخاب نور محدودیتونه ولګوو. له همدې امله، موږ په یاد لرو: دا ټول هغه نقشه ده چې د ویشلو کیلي لري، مګر دننه یې ترتیب شوې نقشه ده.

او هغه هم یو کیلي لري، کوم چې موږ د کلسترینګ کیلي بولو. دا کیلي، چې په پایله کې، د کالمونو څخه جوړه ده چې موږ یې غوره کوو، د کوم په مرسته چې کاسندرا پوهیږي چې څنګه د هغې ډاټا په فزیکي توګه ترتیب شوي او په هر نوډ کې به موقعیت ولري. یعنی د ځینی پارټیشن کیلي لپاره، د کلسترینګ کیلي به تاسو ته په ریښتیا ووایی چې څنګه ډیټا دې ونې ته واچوئ، کوم ځای به هلته ونیسی.

دا واقعیا یوه ونه ده، یو پرتله کوونکی په ساده ډول هلته ویل کیږي، کوم چې موږ د کالمونو یو ټاکلی سیټ د اعتراض په بڼه انتقالوو، او دا د کالمونو لیست په توګه هم مشخص شوی.

CREATE TABLE users_by_year_salary_id (
	user_id uuid,
	name text,
	year int,
	salary float,
	PRIMARY KEY((year), salary, user_id)

لومړني کلیدي لارښوونې ته پام وکړئ؛ د دې لومړی دلیل (زموږ په قضیه کې، کال) تل د برخې کیلي وي. دا کیدای شي د یو یا ډیرو کالمونو څخه جوړه وي، دا مهمه نده. که چیرې څو کالمونه شتون ولري، دا باید بیا په قوسونو کې لرې شي ترڅو د ژبې پری پروسیسر پوه شي چې دا لومړنۍ کیلي ده، او د هغې تر شا نور ټول کالمونه د کلستر کولو کیلي دي. په دې حالت کې، دوی به په پرتله کونکي کې په ترتیب کې لیږدول کیږي چې دوی ښکاري. دا دی، لومړی کالم ډیر مهم دی، دویم کم مهم دی، او داسې نور. موږ څنګه لیکو، د بیلګې په توګه، د ډیټا ټولګیو لپاره ساحې مساوي دي: موږ ساحې لیست کوو، او د دوی لپاره موږ لیکو چې کوم لوی دي او کوم کوچني دي. په کاسندرا کې، دا نسبتا خبرې کوي، د ډیټا ټولګي ساحې، چې د هغې لپاره لیکل شوي مساوي به پلي شي.

موږ ترتیب او محدودیتونه وضع کوو

تاسو اړتیا لرئ په یاد ولرئ چې د ترتیب ترتیب ( ښکته کیدل ، پورته کیدل ، هر څه) په ورته شیبه کې ټاکل کیږي کله چې کیلي رامینځته کیږي ، او دا وروسته نشي بدلیدلی. دا په فزیکي توګه مشخص کوي چې معلومات به څنګه ترتیب شي او دا به څنګه ذخیره شي. که تاسو د کلسترینګ کیلي یا ترتیب ترتیب بدلولو ته اړتیا لرئ، نو تاسو باید یو نوی جدول جوړ کړئ او په هغې کې ډاټا انتقال کړئ. دا به د موجوده سره کار ونکړي.

کیساندرا څنګه مړ نشي که تاسو یوازې اوریکل پیژنئ

موږ خپل میز د کاروونکو سره ډک کړ او ولیدل چې دوی په یوه حلقه کې راوتلي، لومړی د زیږون په کال کې، او بیا د معاش او کارن ID لخوا په هر نوډ کې دننه. اوس موږ کولی شو د محدودیتونو په لګولو سره وټاکو.

زموږ کار یو ځل بیا څرګندیږي where, and، او موږ کاروونکي ترلاسه کوو، او هرڅه بیا سم دي. مګر که موږ هڅه وکړو د کلسترینګ کیلي یوازې یوه برخه وکاروو ، او یو لږ مهم ، نو کاسندرا به سمدلاسه شکایت وکړي چې دا زموږ په نقشه کې هغه ځای نشي موندلی چیرې چې دا څیز ، کوم چې دا ساحې د غیر مقایسه کونکي لپاره لري ، او دا دا یوازې ټاکل شوی و، - چیرته چې هغه پروت دی. زه باید د دې نوډ څخه ټول معلومات بیرته راوباسئ او فلټر یې کړم. او دا د نوډ دننه د بشپړ سکین انلاګ دی، دا خراب دی.

په هر ناڅرګند حالت کې، یو نوی میز جوړ کړئ

که موږ غواړو د ID، یا عمر، یا معاش له مخې کاروونکي په نښه کړو، نو څه باید وکړو؟ هیڅ نه. یوازې دوه میزونه وکاروئ. که تاسو اړتیا لرئ په دریو مختلفو لارو کاروونکو ته ورسیږئ، درې میزونه به وي. هغه ورځې تیرې شوې کله چې موږ په پیچ کې ځای خوندي کړ. دا ترټولو ارزانه سرچینه ده. دا د ځواب وخت په پرتله خورا لږ لګښت لري، کوم چې کاروونکي ته زیان رسوي. دا د کارونکي لپاره خورا خوندور دی چې د 10 دقیقو په پرتله په ثانیه کې یو څه ترلاسه کړي.

موږ د ښه اندازه کولو او د باور وړ کار کولو وړتیا لپاره غیر ضروري ځای او غیر نورمال شوي ډیټا تجارت کوو. په هرصورت، په حقیقت کې، یو کلستر چې درې ډیټا مرکزونه لري، چې هر یو یې پنځه نوډونه لري، د ډیټا ساتنې د منلو وړ کچې سره (کله چې هیڅ شی له لاسه نه ورکوي)، د دې توان لري چې د یو ډیټا مرکز له مړینې څخه په بشپړه توګه ژوندي پاتې شي. او په پاتې دوو کې دوه نور نوډونه. او یوازې له دې وروسته ستونزې پیل کیږي. دا خورا ښه بې ځایه کیدنه ده ، دا د یو څو اضافي SSD ډرایو او پروسیسرونو ارزښت لري. له همدې امله ، د کاسندرا کارولو لپاره ، کوم چې هیڅکله SQL ندی ، په کوم کې چې هیڅ اړیکې شتون نلري ، بهرني کیلي ، تاسو اړتیا لرئ ساده قواعد وپیژنئ.

موږ ستاسو د غوښتنې سره سم هرڅه ډیزاین کوو. اصلي شی دا نه دی چې ډاټا، مګر دا چې غوښتنلیک څنګه کار کوي. که دا اړتیا ولري مختلف ډیټا په بیلابیلو لارو یا ورته ډیټا په بیلابیلو لارو ترلاسه کړي ، موږ باید دا په داسې طریقه واچوو چې د غوښتنلیک لپاره مناسب وي. که نه نو، موږ به په بشپړ سکین کې ناکام شو او کیسیندرا به موږ ته هیڅ ګټه ونه رسوي.

د معلوماتو غیر عادي کول یو نورم دی. موږ د عادي بڼو په اړه هېر کوو، موږ نور اړوند ډیټابیسونه نلرو. که موږ یو شی سل ځله ښکته کړو، هغه به 100 ځله ټیټ شي. دا لاهم د ودریدو په پرتله ارزانه ده.

موږ د ویشلو لپاره کیلي غوره کوو ترڅو دوی په نورمال ډول وویشل شي. موږ نه غواړو زموږ د کیلي هش په یو محدود حد کې راشي. یعنی په پورتنی مثال کی د زیږون کال بد مثال دی. په دقیق ډول، دا ښه ده که چیرې زموږ کاروونکي په نورمال ډول د زیږون په کال ویشل شي، او بد که موږ د پنځم ټولګي زده کونکو په اړه وغږیږو - هلته ویشل به ډیر ښه نه وي.

ترتیب کول یو ځل د کلسترینګ کیلي جوړولو په مرحله کې غوره کیږي. که دا بدلون ته اړتیا وي، موږ باید خپل میز د بل کیلي سره تازه کړو.

او ترټولو مهم شی: که موږ ورته ډیټا په 100 مختلف لارو بیرته ترلاسه کولو ته اړتیا لرو ، نو موږ به 100 مختلف میزونه ولرو.

سرچینه: www.habr.com

Add a comment