ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ проСктирования ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… для NoSQL

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ проСктирования ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… для NoSQL «НуТно Π±Π΅ΠΆΠ°Ρ‚ΡŒ со всСх Π½ΠΎΠ³, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π½Π° мСстС,
Π° Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΡƒΠ΄Π°-Ρ‚ΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ, Π½Π°Π΄ΠΎ Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π²Π΄Π²ΠΎΠ΅ быстрСС!Β»
(с) Алиса Π² странС чудСс

НСкотороС врСмя Π½Π°Π·Π°Π΄ мСня попросили ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π»Π΅ΠΊΡ†ΠΈΡŽ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ°ΠΌ нашСй ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π½Π° Ρ‚Π΅ΠΌΡƒ проСктирования ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, вСдь сидя Π΄ΠΎΠ»Π³ΠΎΠ΅ врСмя Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… (ΠΏΠΎΡ€ΠΎΡŽ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π»Π΅Ρ‚) ΠΌΡ‹ упускаСм ΠΈΠ· Π²ΠΈΠ΄Ρƒ происходящСС Π²ΠΎΠΊΡ€ΡƒΠ³ Π² ΠΌΠΈΡ€Π΅ ИВ-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ. Π’ нашСй ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ (ΡƒΠΆ Ρ‚Π°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ) Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ NoSQL-Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… (ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°), поэтому Π² своСй Π»Π΅ΠΊΡ†ΠΈΠΈ я ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ΄Π΅Π»ΠΈΠ» ΠΈΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ HBase ΠΈ постарался ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° Π½Π° Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ с Π½ΠΈΠΌΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π». Π’ частности, я ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π» Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ особСнности проСктирования ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСсколько Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π» Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Β«Introduction to HB ase Schema DesignΒ» by Amandeep Khurana. Разбирая ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, я сравнивал ΠΌΠ΅ΠΆΠ΄Ρƒ собой нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ донСсти Π΄ΠΎ ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Π΅ΠΉ основныС ΠΈΠ΄Π΅ΠΈ.

НСдавно, Β«ΠΎΡ‚ Π½Π΅Ρ‡Π΅Π³ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒΒ», я задался вопросом (Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ майскиС Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΊΠ°Ρ€Π°Π½Ρ‚ΠΈΠ½Π° ΠΊ этому особСнно Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚), насколько тСорСтичСскиС Π²Ρ‹ΠΊΠ»Π°Π΄ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅? БобствСнно, Ρ‚Π°ΠΊ ΠΈ Ρ€ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ идСя этой ΡΡ‚Π°Ρ‚ΡŒΠΈ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ дСнь Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с NoSQL, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π½Π΅ ΠΏΠΎΡ‡Π΅Ρ€ΠΏΠ½Π΅Ρ‚ ΠΈΠ· Π½Π΅Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅ (ΠΈ поэтому ΠΌΠΎΠΆΠ΅Ρ‚ сразу ΠΏΡ€ΠΎΠΌΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡΡ‚Π°Ρ‚ΡŒΠΈ). Но для Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‰Π΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ ΠΏΠ»ΠΎΡ‚Π½ΠΎ с NoSQL, полагаю, ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Π° для получСния Π±Π°Π·ΠΎΠ²Ρ‹Ρ… прСдставлСний ΠΎΠ± особСнностях проСктирования ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ… для HBase.

Π Π°Π·Π±ΠΎΡ€ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°

На ΠΌΠΎΠΉ взгляд, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ NoSQL Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΈ Π²Π·Π²Π΅ΡΠΈΡ‚ΡŒ Β«Π·Π°Β» ΠΈ Β«ΠΏΡ€ΠΎΡ‚ΠΈΠ²Β». Часто Π·Π°Π΄Π°Ρ‡Ρƒ скорСС всСго ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΈ Π½Π° Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… рСляционных Π‘Π£Π‘Π”. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π»ΡƒΡ‡ΡˆΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ NoSQL Π±Π΅Π· сущСствСнных Π½Π° Ρ‚ΠΎ оснований. Если всС ΠΆΠ΅ Π±Ρ‹Π»ΠΎ принято Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ NoSQL Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ слСдуСт ΡƒΡ‡Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ здСсь нСсколько ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ. ОсобСнно Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Π΄ΠΎ этого ΠΈΠΌΠ΅Π» Π΄Π΅Π»ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с рСляционными Π‘Π£Π‘Π” (ΠΏΠΎ ΠΌΠΎΠΈΠΌ наблюдСниям). Π’Π°ΠΊ, Π² «рСляционном» ΠΌΠΈΡ€Π΅ ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠ΄Π΅ΠΌ ΠΎΡ‚ модСлирования ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области, ΠΈ ΡƒΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΈ нСобходимости ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌ Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π’ NoSQL ΠΆΠ΅ ΠΌΡ‹ сразу Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡ‹Π΅ сцСнарии Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π΄Π΅Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π΅ΡΡ‚ΡŒ ряд Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ написано Π½ΠΈΠΆΠ΅.

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Β«ΡΠΈΠ½Ρ‚Π΅Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽΒ» Π·Π°Π΄Π°Ρ‡Ρƒ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈ Π±ΡƒΠ΄Π΅ΠΌ Π΄Π°Π»Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ:

НСобходимо ΡΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ структуру хранСния списка Π΄Ρ€ΡƒΠ·Π΅ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π΅ΠΊΠΎΠΉ абстрактной ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ сСти. Для упрощСния Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС связи Ρƒ нас Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ (ΠΊΠ°ΠΊ Π² Π˜Π½ΡΡ‚Π°Π³Ρ€Π°ΠΌΠΌΠ΅, Π° Π½Π΅ Π² Linkedin). Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ‚ΡŒ эффСктивно:

  • ΠžΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° вопрос, Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ А ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π‘ (шаблон чтСния)
  • ΠŸΠΎΠ·Π²ΠΎΠ»ΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ/ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ связи Π² случаС подписки/отписки ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ А ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π‘ (шаблон измСнСния Π΄Π°Π½Π½Ρ‹Ρ…)

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ мноТСство. Π’ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ рСляционной Π‘Π” ΠΌΡ‹ Π±Ρ‹ скорСС всСго просто сдСлали Π±Ρ‹ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ связСй (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ, Ссли, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, трСбуСтся Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ: сСмья, Ρ€Π°Π±ΠΎΡ‚Π° ΠΈ Ρ‚.ΠΏ., Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹ΠΉ Β«Π΄Ρ€ΡƒΠ³Β»), Π° для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ скорости доступа Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π±Ρ‹ индСксы/ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π‘ΠΊΠΎΡ€Π΅Π΅ всСго итоговая Ρ‚Π°Π±Π»ΠΈΡ†Π° выглядСла Π±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

user_id
friend_id

Вася
ΠŸΠ΅Ρ‚Ρ

Вася
Оля

здСсь ΠΈ Π΄Π°Π»Π΅Π΅ для наглядности ΠΈ Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ понимания вмСсто ID Π±ΡƒΠ΄Ρƒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π°

Π’ случаС ΠΆΠ΅ с HBase ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ:

  • эффСктивный поиск, Π½Π΅ приводящий ΠΊ full table scan, Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ
    • собствСнно, поэтому ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΌΠ½ΠΎΠ³ΠΈΠΌ SQL-запросы ΠΊ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ Π±Π°Π·Π°ΠΌ – плохая идСя; тСхничСски, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ· Ρ‚ΠΎΠΉ ΠΆΠ΅ Impala ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ SQL-запрос с Join’ами ΠΈ ΠΏΡ€ΠΎΡ‡Π΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ Π² HBase, Π½ΠΎ Π²ΠΎΡ‚ насколько это Π±ΡƒΠ΄Π΅Ρ‚ эффСктивно…

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ID ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΌΡ‹ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡. А ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΌΡ‹ΡΠ»ΡŒΡŽ Π½Π° Ρ‚Π΅ΠΌΡƒ Β«Π³Π΄Π΅ ΠΈ ΠΊΠ°ΠΊ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ID Π΄Ρ€ΡƒΠ·Π΅ΠΉ?Β» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ идСя хранСния ΠΈΡ… Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°Ρ…. Π­Ρ‚ΠΎΡ‚ самый ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ ΠΈ Β«Π½Π°ΠΈΠ²Π½Ρ‹ΠΉΒ» Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ (Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 1 (default), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π² дальнСйшСм):

RowKey
Колонки

Вася
1: ΠŸΠ΅Ρ‚Ρ
2: Оля
3: Π”Π°ΡˆΠ°

ΠŸΠ΅Ρ‚Ρ
1: Маша
2: Вася

Π—Π΄Π΅ΡΡŒ каТдая строка соотвСтствуСт ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ сСти. Колонки ΠΈΠΌΠ΅ΡŽΡ‚ ΠΈΠΌΠ΅Π½Π°: 1, 2, … β€” ΠΏΠΎ количСству Π΄Ρ€ΡƒΠ·Π΅ΠΉ, ΠΈ Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°Ρ… хранятся ID Π΄Ρ€ΡƒΠ·Π΅ΠΉ. Π’Π°ΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π½ΠΎΠ΅ число ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π° рисункС Π²Ρ‹ΡˆΠ΅ ΠΎΠ΄Π½Π° строка ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ (1, 2 ΠΈ 3), Π° вторая – Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π΅ (1 ΠΈ 2) – здСсь ΠΌΡ‹ сами воспользовались двумя свойствами HBase, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Ρƒ рСляционных Π‘Π”:

  • Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ динамичСски ΠΌΠ΅Π½ΡΡ‚ΡŒ состав ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ (добавляСм Π΄Ρ€ΡƒΠ³Π° -> добавляСм ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ, удаляСм Π΄Ρ€ΡƒΠ³Π° -> удаляСм ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ)
  • Ρƒ Ρ€Π°Π·Π½Ρ‹Ρ… строк ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΉ состав ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Π½Π°ΡˆΡƒ структуру Π½Π° соотвСтствиС трСбованиям Π·Π°Π΄Π°Ρ‡ΠΈ:

  • Π§Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…: для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, подписан Π»ΠΈ Вася Π½Π° Олю, Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ всю строку ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ RowKey = «Вася» ΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ значСния ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ, ΠΏΠΎΠΊΠ° Π½Π΅ «встрСтим» Π² Π½ΠΈΡ… Олю. Или ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ значСния всСх ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ, Β«Π½Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒΒ» Олю ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ False;
  • ИзмСнСниС Π΄Π°Π½Π½Ρ‹Ρ…: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³Π°: для ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π°ΠΌ Ρ‚Π°ΠΊ ΠΆΠ΅ потрСбуСтся Π²Ρ‹Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ всю строку ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ RowKey = «Вася», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ количСство Π΅Π³ΠΎ Π΄Ρ€ΡƒΠ·Π΅ΠΉ. Π­Ρ‚ΠΎ ΠΎΠ±Ρ‰Π΅Π΅ ΠΊΠΎΠ»-Π²ΠΎ Π΄Ρ€ΡƒΠ·Π΅ΠΉ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π°Π΄ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ID Π½ΠΎΠ²ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³Π°.
  • ИзмСнСниС Π΄Π°Π½Π½Ρ‹Ρ…: ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³Π°:
    • НСобходимо Π²Ρ‹Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ всю строку ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ RowKey = «Вася» ΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Ρ‚Ρƒ ΡΠ°ΠΌΡƒΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ записан удаляСмый Π΄Ρ€ΡƒΠ³;
    • Π”Π°Π»Π΅Π΅ Π½Π°ΠΌ, послС удалСния Π΄Ρ€ΡƒΠ³Π°, Π½Π°Π΄ΠΎ Β«ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒΒ» всС Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Β«Ρ€Π°Π·Ρ€Ρ‹Π²ΠΎΠ²Β» Π² ΠΈΡ… Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ†Π΅Π½ΠΈΠΌ, насколько Π΄Π°Π½Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° сторонС «условного прилоТСния», Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ О-символику. ΠžΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ нашСй гипотСтичСской ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ сСти ΠΊΠ°ΠΊ n. Π’ΠΎΠ³Π΄Π° максимальноС число Π΄Ρ€ΡƒΠ·Π΅ΠΉ Ρƒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ (n-1). Π­Ρ‚ΠΎΠΉ (-1) ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π² дальнСйшСм ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Ρ‡ΡŒ для Π½Π°ΡˆΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… использования О-символики ΠΎΠ½Π° нСсущСствСнна.

  • Π§Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…: Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ всю строку ΠΈ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π΅ всС Π΅Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ. Π—Π½Π°Ρ‡ΠΈΡ‚ вСрхняя ΠΎΡ†Π΅Π½ΠΊΠ° Π·Π°Ρ‚Ρ€Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ О(n)
  • ИзмСнСниС Π΄Π°Π½Π½Ρ‹Ρ…: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³Π°: для опрСдСлСния количСства Π΄Ρ€ΡƒΠ·Π΅ΠΉ трСбуСтся ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ всС ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ строки, послС Ρ‡Π΅Π³ΠΎ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ => О(n)
  • ИзмСнСниС Π΄Π°Π½Π½Ρ‹Ρ…: ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³Π°:
    • Аналогично добавлСнию – трСбуСтся Π² ΠΏΡ€Π΅Π΄Π΅Π»Π΅ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ всС ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ => О(n)
    • ПослС удалСния ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ Π½Π°ΠΌ Π½Π°Π΄ΠΎ Β«ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒΒ» ΠΈΡ…. Если Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ это Β«Π² Π»ΠΎΠ±Β», Ρ‚ΠΎ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π΅ потрСбуСтся Π΅Ρ‰Π΅ Π΄ΠΎ (n-1) ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Но ΠΌΡ‹ здСсь ΠΈ Π΄Π°Π»Π΅Π΅ Π² практичСской части ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΈΠ½ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ «псСвдо-сдвиг» Π·Π° фиксированноС ΠΊΠΎΠ»-Π²ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ – Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π° Π½Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ константноС врСмя Π²Π½Π΅ зависимости ΠΎΡ‚ n. Π­Ρ‚ΠΈΠΌ константным Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ (Ссли Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ, Ρ‚ΠΎ О(2)) ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с О(n) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Ρ‡ΡŒ. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° рисункС Π½ΠΈΠΆΠ΅: ΠΌΡ‹ просто ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· «послСднСй» ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Π² Ρ‚Ρƒ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π°Π΄ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, послС Ρ‡Π΅Π³ΠΎ удаляСм послСднюю ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ:
      ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ проСктирования ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… для NoSQL

Π˜Ρ‚ΠΎΠ³ΠΎ, Π²ΠΎ всСх сцСнариях ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π°ΡΠΈΠΌΠΏΡ‚ΠΎΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ O(n).
НавСрноС, Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ приходится ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда Π²Ρ‹Ρ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ· Π±Π°Π·Ρ‹ всю строку Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π² Π΄Π²ΡƒΡ… случаях ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ всС ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ ΠΈ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ ΠΊΠΎΠ»-Π²ΠΎ Π΄Ρ€ΡƒΠ·Π΅ΠΉ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² качСствС ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ Β«countΒ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ число Π΄Ρ€ΡƒΠ·Π΅ΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ сСти. Π’ этом случаС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅ Π²Ρ‹Ρ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ всю строку Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ для подсчСта ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΊΠΎΠ»-Π²Π° Π΄Ρ€ΡƒΠ·Π΅ΠΉ, Π° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ Β«countΒ». Π“Π»Π°Π²Π½ΠΎΠ΅, Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ Β«countΒ» ΠΏΡ€ΠΈ манипуляции с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π’.ΠΎ. ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½Ρ‹ΠΉ Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 2 (count):

RowKey
Колонки

Вася
1: ΠŸΠ΅Ρ‚Ρ
2: Оля
3: Π”Π°ΡˆΠ°
count: 3

ΠŸΠ΅Ρ‚Ρ
1: Маша
2: Вася

count: 2

По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ:

  • Π§Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…: для получСния ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° вопрос Β«Π§ΠΈΡ‚Π°Π΅Ρ‚ Π»ΠΈ Вася Олю?Β» Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ измСнилось => О(n)
  • ИзмСнСниС Π΄Π°Π½Π½Ρ‹Ρ…: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³Π°: ΠœΡ‹ упростили вставку Π½ΠΎΠ²ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½Π΅ Π½Π°Π΄ΠΎ Π²Ρ‹Ρ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ всю строку ΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ Π΅Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ, Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Β«countΒ» ΠΈ Ρ‚.ΠΎ. сразу ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ для вставки Π½ΠΎΠ²ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³Π°. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ сниТСнию Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ слоТности Π΄ΠΎ О(1)
  • ИзмСнСниС Π΄Π°Π½Π½Ρ‹Ρ…: ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³Π°: ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π΄Ρ€ΡƒΠ³Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ‚Π°ΠΊ ΠΆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΡ€ΠΈ «сдвигС» Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΎΠ΄Π½Ρƒ ячСйку Π²Π»Π΅Π²ΠΎ. Но Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ для поиска Ρ‚ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ, всС Ρ€Π°Π²Π½ΠΎ остаСтся, поэтому => O(n)
  • Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ Β«countΒ», Π½ΠΎ Π½Π° это ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ константноС врСмя, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… О-символики ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Ρ‡ΡŒ

Π’ Ρ†Π΅Π»ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ 2 видится Ρ‡ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ, Π½ΠΎ это скорСС Β«ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΡ вмСсто Ρ€Π΅Π²ΠΎΠ»ΡŽΡ†ΠΈΠΈΒ». Для ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Β«Ρ€Π΅Π²ΠΎΠ»ΡŽΡ†ΠΈΠΈΒ» Π½Π°ΠΌ понадобится Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 3 (col).
ΠŸΠ΅Ρ€Π΅Π²Π΅Ρ€Π½Π΅ΠΌ всС «с Π½ΠΎΠ³ Π½Π° Π³ΠΎΠ»ΠΎΠ²ΡƒΒ»: Π½Π°Π·Π½Π°Ρ‡ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ! Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ записано Π² самой ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ – для нас ΡƒΠΆΠ΅ Π½Π΅ ΡΡƒΡ‚ΡŒ Π²Π°ΠΆΠ½ΠΎ, ΠΏΡƒΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ†ΠΈΡ„Ρ€Π° 1 (Π²ΠΎΠΎΠ±Ρ‰Π΅, ΠΈΠ· ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ Ρ‚Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³Ρ€ΡƒΠΏΠΏΡƒ «сСмья/Π΄Ρ€ΡƒΠ·ΡŒΡ/ΠΈ Ρ‚.ΠΏ.Β»). Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚ΡŒ Π½Π΅ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ «обыватСля», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎ этого Π½Π΅ ΠΈΠΌΠ΅Π» ΠΎΠΏΡ‹Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с NoSQL-Π±Π°Π·Π°ΠΌΠΈ, Π½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π» HBase Π² Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ эффСктивнСС:

RowKey
Колонки

Вася
ΠŸΠ΅Ρ‚Ρ: 1
Оля: 1
Π”Π°ΡˆΠ°: 1

ΠŸΠ΅Ρ‚Ρ
Маша: 1
Вася: 1

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ сразу нСсколько прСимущСств. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π½ΠΎΠ²ΡƒΡŽ структуру ΠΈ ΠΎΡ†Π΅Π½ΠΈΠΌ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ:

  • Π§Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…: для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° вопрос, подписан Π»ΠΈ Вася Π½Π° Олю, достаточно ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ «Оля»: Ссли ΠΎΠ½Π° Π΅ΡΡ‚ΡŒ, Ρ‚ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ True, Ссли Π½Π΅Ρ‚ – False => O(1)
  • ИзмСнСниС Π΄Π°Π½Π½Ρ‹Ρ…: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³Π°: Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³Π°: достаточно просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ Β«ID Π΄Ρ€ΡƒΠ³Π°Β» => O(1)
  • ИзмСнСниС Π΄Π°Π½Π½Ρ‹Ρ…: ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³Π°: достаточно просто ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ Β«ID Π΄Ρ€ΡƒΠ³Π°Β» => O(1)

Как Π²ΠΈΠ΄ΠΈΠΌ, сущСствСнным прСимущСством Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ хранСния являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²ΠΎ всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π½Π°ΠΌ сцСнариях ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΎΠΉ, избСгая вычитывания ΠΈΠ· Π±Π°Π·Ρ‹ всСй строки ΠΈ Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅, ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° всСх ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ этой строки. На этом ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ, но…

МоТно ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈΡ‚ΡŒΡΡ ΠΈ ΠΏΠΎΠΉΡ‚ΠΈ Π΅Ρ‰Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ дальшС ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Π±Π°Π·Π΅. Π§Ρ‚ΠΎ Ссли Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ связи нСпосрСдствСнно Π² самом ΠΊΠ»ΡŽΡ‡Π΅ строки? Π’ΠΎ Π΅ΡΡ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ составным Π²ΠΈΠ΄Π° userID.friendID? Π’ этом случаС Π½Π°ΠΌ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ Π½Π΅ Π²Ρ‹Ρ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ строки (Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 4(row)):

RowKey
Колонки

Вася.ΠŸΠ΅Ρ‚Ρ
ΠŸΠ΅Ρ‚Ρ: 1

Вася.Оля
Оля: 1

Вася.Π”Π°ΡˆΠ°
Π”Π°ΡˆΠ°: 1

ΠŸΠ΅Ρ‚Ρ.Маша
Маша: 1

ΠŸΠ΅Ρ‚Ρ.Вася
Вася: 1

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΡ†Π΅Π½ΠΊΠ° всСх сцСнариСв манипуляции с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² Ρ‚Π°ΠΊΠΎΠΉ структурС Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ О(1). Π Π°Π·Π½ΠΈΡ†Π° с Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ 3 Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΆΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² эффСктивности ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Π² Π‘Π”.

Ну ΠΈ послСдний Β«Π±Π°Π½Ρ‚ΠΈΠΊΒ». Π›Π΅Π³ΠΊΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ 4 Ρƒ нас ΠΊΠ»ΡŽΡ‡ строки Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ, Ρ‡Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ (Ρ‚ΡƒΡ‚ вспоминаСм, Ρ‡Ρ‚ΠΎ HBase Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈ строки Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… отсортированы ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ). Плюс Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сцСнариях ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ это влияниС, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ…ΡΡˆΠΈ ΠΎΡ‚ userID ΠΈ friendID, ΠΈ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±Π° Ρ…ΡΡˆΠ° Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΡΡ‚ΠΎΡΠ½Π½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ просто ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…, Π±Π΅Π· раздСлитСля. Π’ΠΎΠ³Π΄Π° Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ (Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 5(hash)):

RowKey
Колонки

dc084ef00e94aef49be885f9b01f51c01918fa783851db0dc1f72f83d33a5994
ΠŸΠ΅Ρ‚Ρ: 1

dc084ef00e94aef49be885f9b01f51c0f06b7714b5ba522c3cf51328b66fe28a
Оля: 1

dc084ef00e94aef49be885f9b01f51c00d2c2e5d69df6b238754f650d56c896a
Π”Π°ΡˆΠ°: 1

1918fa783851db0dc1f72f83d33a59949ee3309645bd2c0775899fca14f311e1
Маша: 1

1918fa783851db0dc1f72f83d33a5994dc084ef00e94aef49be885f9b01f51c0
Вася: 1

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ алгоритмичСская ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚Π°ΠΊΠΎΠΉ структурой ΠΏΠΎ рассматриваСмом Π½Π°ΠΌΠΈ сцСнариями, Π±ΡƒΠ΄Π΅Ρ‚ такая ΠΆΠ΅, ΠΊΠ°ΠΊ Ρƒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° 4 – Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ О(1).
Π˜Ρ‚ΠΎΠ³ΠΎ, свСдСм всС наши ΠΎΡ†Π΅Π½ΠΊΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ слоТности Π² ΠΎΠ΄Π½Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ:

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³Π°
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΄Ρ€ΡƒΠ³Π°
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³Π°

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 1 (default)
O(n)
O(n)
O(n)

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 2 (count)
O(1)
O(n)
O(n)

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 3 (column)
O(1)
O(1)
O(1)

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 4 (row)
O(1)
O(1)
O(1)

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 5 (hash)
O(1)
O(1)
O(1)

Как Π²ΠΈΠ΄Π½ΠΎ, Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ 3-5 выглядят Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ тСорСтичСски обСспСчиваСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… сцСнариСв манипуляции с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π·Π° константноС врСмя. Π’ условии нашСй Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π΅Ρ‚ явного трСбования ΠΏΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡŽ списка всСх Π΄Ρ€ΡƒΠ·Π΅ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π½ΠΎ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½ΠΎΠΉ Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π°ΠΌ, ΠΊΠ°ΠΊ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ°ΠΌ, Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π±Ρ‹ Β«ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Ρ‚ΡŒΒ», Ρ‡Ρ‚ΠΎ подобная Π·Π°Π΄Π°Ρ‡Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΈ Β«ΠΏΠΎΠ΄ΡΡ‚Π΅Π»ΠΈΡ‚ΡŒ соломку». ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠΎΠΈ симпатии Π½Π° сторонС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° 3. Но Π²ΠΏΠΎΠ»Π½Π΅ вСроятно, Ρ‡Ρ‚ΠΎ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π΄Π°Π½Π½Ρ‹ΠΉ запрос ΠΌΠΎΠ³Π» Π±Ρ‹Ρ‚ΡŒ ΡƒΠΆΠ΅ Ρ€Π΅ΡˆΠ΅Π½ ΠΈΠ½Ρ‹ΠΌΠΈ срСдствами, поэтому Π±Π΅Π· ΠΎΠ±Ρ‰Π΅Π³ΠΎ видСния всСй Π·Π°Π΄Π°Ρ‡ΠΈ Π»ΡƒΡ‡ΡˆΠ΅ Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Π²ΠΎΠ΄ΠΎΠ².

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° экспСримСнта

Π’Ρ‹ΡˆΠ΅ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ тСорСтичСскиС рассуТдСния Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ – это ΠΈ Π±Ρ‹Π»ΠΎ Ρ†Π΅Π»ΡŒΡŽ возникшСй Π½Π° Π΄ΠΎΠ»Π³ΠΈΡ… Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π·Π°Π΄ΡƒΠΌΠΊΠΈ. Для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ нашСго «условного прилоТСния» Π²ΠΎ всСх описанных сцСнариях использования Π±Π°Π·Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ рост этого Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ с ростом Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ сСти (n). Π¦Π΅Π»Π΅Π²Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нас интСрСсуСт ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π·Π°ΠΌΠ΅Ρ€ΡΡ‚ΡŒ Π² Ρ…ΠΎΠ΄Π΅ экспСримСнта, являСтся врСмя, Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ «условным ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌΒ», Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ «бизнСс-ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΒ». Под «бизнСс-ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉΒ» ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ…:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³Π°
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, являСтся Π»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ А Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π‘
  • Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³Π°

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… Π² ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ постановкС Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ, сцСнарий ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ вырисовываСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

  • Π—Π°ΠΏΠΈΡΡŒ Π΄Π°Π½Π½Ρ‹Ρ…. Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ случайным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ n. Для большСго приблиТСния ΠΊ "Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΌΠΈΡ€Ρƒ" количСство Π΄Ρ€ΡƒΠ·Π΅ΠΉ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ – Ρ‚Π°ΠΊ ΠΆΠ΅ случайная Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π°. Π—Π°ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ врСмя, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ нашС «условноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Β» Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ Π² HBase всС сгСнСрированныС Π΄Π°Π½Π½Ρ‹Π΅. ΠŸΠΎΡ‚ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ врСмя Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° ΠΎΠ±Ρ‰Π΅Π΅ количСство Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Π΄Ρ€ΡƒΠ·Π΅ΠΉ – Ρ‚Π°ΠΊ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ срСднСС врСмя Π½Π° ΠΎΠ΄Π½Ρƒ «бизнСс-ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽΒ»
  • Π§Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ список «личностСй», для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°Π΄ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚, подписан Π»ΠΈ Π½Π° Π½ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π”Π»ΠΈΠ½Π° списка = ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΊΠΎΠ»-Π²Ρƒ Π΄Ρ€ΡƒΠ·Π΅ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ для ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ провСряСмых Π΄Ρ€ΡƒΠ·Π΅ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Β«Π”Π°Β», Π° для Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ – «НСт». ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° производится Π² Ρ‚Π°ΠΊΠΎΠΌ порядкС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Β«Π”Π°Β» ΠΈ «НСт» Ρ‡Π΅Ρ€Π΅Π΄ΠΎΠ²Π°Π»ΠΈΡΡŒ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС Π½Π°ΠΌ придСтся ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ‚ΡŒ всС ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ строки для Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² 1 ΠΈ 2). ΠžΠ±Ρ‰Π΅Π΅ врСмя ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π·Π°Ρ‚Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° количСство провСряСмых Π΄Ρ€ΡƒΠ·Π΅ΠΉ для получСния срСднСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚Π°.
  • Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ всСх Π΄Ρ€ΡƒΠ·Π΅ΠΉ. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ порядок удалСния – случайный (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Β«ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡˆΠΈΠ²Π°Π΅ΠΌΒ» ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ список, использовавшийся для записи Π΄Π°Π½Π½Ρ‹Ρ…). ΠžΠ±Ρ‰Π΅Π΅ врСмя ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π·Π°Ρ‚Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° количСство удаляСмых Π΄Ρ€ΡƒΠ·Π΅ΠΉ для получСния срСднСго Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ.

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ³Π½Π°Ρ‚ΡŒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· 5 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ сСти, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ мСняСтся врСмя с Π΅Π΅ ростом. Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ n связи Π² сСти ΠΈ список ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ, СстСствСнно, ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ для всСх 5 Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ².
Для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ понимания Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠΆΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сгСнСрированных Π΄Π°Π½Π½Ρ‹Ρ… для n= 5. Написанный Β«Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Β» Π΄Π°Π΅Ρ‚ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Ρ‚Ρ€ΠΈ словаря ID-шников:

  • ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ – для вставки
  • Π²Ρ‚ΠΎΡ€ΠΎΠΉ – для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ
  • Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ – для удалСния

{0: [1], 1: [4, 5, 3, 2, 1], 2: [1, 2], 3: [2, 4, 1, 5, 3], 4: [2, 1]} # всСго 15 Π΄Ρ€ΡƒΠ·Π΅ΠΉ

{0: [1, 10800], 1: [5, 10800, 2, 10801, 4, 10802], 2: [1, 10800], 3: [3, 10800, 1, 10801, 5, 10802], 4: [2, 10800]} # всСго 18 провСряСмых ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

{0: [1], 1: [1, 3, 2, 5, 4], 2: [1, 2], 3: [4, 1, 2, 3, 5], 4: [1, 2]} # всСго 15 Π΄Ρ€ΡƒΠ·Π΅ΠΉ

Как ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, всС ID, большиС 10 000 Π² словарС для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ – это ΠΊΠ°ΠΊ Ρ€Π°Π· Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π²Π΅Π΄ΠΎΠΌΠΎ Π΄Π°Π΄ΡƒΡ‚ ΠΎΡ‚Π²Π΅Ρ‚ False. Вставка, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Β«Π΄Ρ€ΡƒΠ·Π΅ΠΉΒ» производятся ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² словарС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ЭкспСримСнт проводился Π½Π° Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ΅ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Windows 10, Π³Π΄Π΅ Π² ΠΎΠ΄Π½ΠΎΠΌ Π΄ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Π±Ρ‹Π»Π° Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° Π±Π°Π·Π° HBase, Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ – Python с Jupyter Notebook. Π”ΠΎΠΊΠ΅Ρ€Ρƒ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΎ 2 ядра CPU ΠΈ 2 Π“Π± ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. Вся Π»ΠΎΠ³ΠΈΠΊΠ°, ΠΊΠ°ΠΊ ΠΈ эмуляции Ρ€Π°Π±ΠΎΡ‚Ρ‹ «условного прилоТСния», Ρ‚Π°ΠΊ ΠΈ «обвязка» для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ тСстовых Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π·Π°ΠΌΠ΅Ρ€Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π±Ρ‹Π»ΠΈ написаны Π½Π° Python. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с HBase использовалась Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° happybase, для вычислСния Ρ…ΡΡˆΠ΅ΠΉ (MD5) для Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° 5 β€” hashlib

Π‘ ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ мощности ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ° ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ запуск для n = 10, 30, …. 170 – ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Ρ‰Π΅Π΅ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° тСстирования (всС сцСнарии для всСх Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² для всСх n) Π±Ρ‹Π»ΠΎ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ Ρ€Π°Π·ΡƒΠΌΠ½Ρ‹ΠΌ ΠΈ ΡƒΠΌΠ΅Ρ‰Π°Π»ΠΎΡΡŒ Π²ΠΎ врСмя ΠΎΠ΄Π½ΠΎΠ³ΠΎ чаСпития (Π² срСднСм 15 ΠΌΠΈΠ½ΡƒΡ‚).

Π’ΡƒΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π΅ΠΌΠ°Ρ€ΠΊΡƒ, Ρ‡Ρ‚ΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ экспСримСнтС ΠΌΡ‹ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅ΠΌ Π½Π΅ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π”Π°ΠΆΠ΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ сравнСниС Ρ€Π°Π·Π½Ρ‹Ρ… Π΄Π²ΡƒΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ совсСм ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ. БСйчас нас интСрСсуСт ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ измСнСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² зависимости ΠΎΡ‚ n, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ «тСстового стСнда» ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΡ†Π΅Π½ΠΊΠΈ, Β«ΠΎΡ‡ΠΈΡ‰Π΅Π½Π½Ρ‹Π΅Β» ΠΎΡ‚ влияния случайных ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², ΠΎΡ‡Π΅Π½ΡŒ слоТно (Π΄Π° ΠΈ Ρ‚Π°ΠΊΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π΅ ΡΡ‚Π°Π²ΠΈΠ»ΠΎΡΡŒ).

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ экспСримСнта

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ тСст – ΠΊΠ°ΠΊ мСняСтся врСмя, Π·Π°Ρ‚Ρ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ Π½Π° Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ списка Π΄Ρ€ΡƒΠ·Π΅ΠΉ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ – Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅ Π½ΠΈΠΆΠ΅.
ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ проСктирования ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… для NoSQL
Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ 3-5 ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ практичСски константноС врСмя «бизнСс-ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΒ», ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ зависит ΠΎΡ‚ роста Ρ€Π°Π·ΠΌΠ΅Ρ€Π° сСти ΠΈ Π½Π΅ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΌΡƒΡŽ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.
Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 2 ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠΆΠ΅ ΠΊΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π½ΡƒΡŽ, Π½ΠΎ Ρ‡ΡƒΡ‚ΡŒ Ρ…ΡƒΠ΄ΡˆΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ практичСски Ρ€ΠΎΠ²Π½ΠΎ Π² 2 Ρ€Π°Π·Π° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² 3-5. И это Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ€Π°Π΄ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΡΠΎΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ с Ρ‚Π΅ΠΎΡ€ΠΈΠ΅ΠΉ – Π² этом Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Π²/ΠΈΠ· HBase ΠΊΠ°ΠΊ Ρ€Π°Π· Π² 2 Ρ€Π°Π·Π° большС. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ косвСнным ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎΠΌ, Ρ‡Ρ‚ΠΎ наш тСстовый стСнд Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π΄Π°Π΅Ρ‚ Π½Π΅ΠΏΠ»ΠΎΡ…ΡƒΡŽ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ.
Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 1 Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎ оказываСтся самым ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ ΠΈ дСмонстрируСт Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° сСти рост Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π·Π°Ρ‚Ρ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π½Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎ Π΄Ρ€ΡƒΠ³Π°.
ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ тСста.
ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ проСктирования ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… для NoSQL
Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ 3-5 ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅ Π²Π΅Π΄Π΅Ρ‚ сСбя ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎ – константноС врСмя, Π½Π΅ зависящСС ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° сСти. Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ 1 ΠΈ 2 Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ рост Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΈ ростС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° сСти ΠΈ ΡΡ…ΠΎΠΆΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ 2 оказываСтся Ρ‡ΡƒΡ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ – ΠΏΠΎ всСй видимости ΠΈΠ·-Π·Π° нСобходимости Π²Ρ‹Ρ‡ΠΈΡ‚ΠΊΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Β«countΒ», Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ростС n становится Π±ΠΎΠ»Π΅Π΅ Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ΠΌ. Но я всС ΠΆΠ΅ Π²ΠΎΠ·Π΄Π΅Ρ€ΠΆΡƒΡΡŒ ΠΎΡ‚ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠ², Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ сравнСния ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ нСвысока. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π΄Π°Π½Π½Ρ‹Π΅ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ (ΠΊΠ°ΠΊΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, 1 ΠΈΠ»ΠΈ 2, быстрСС) мСнялись ΠΎΡ‚ запуска ΠΊ запуску (ΠΏΡ€ΠΈ этом сохраняя Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ зависимости ΠΈ "идя ноздря Π² Π½ΠΎΠ·Π΄Ρ€ΡŽ").

Ну ΠΈ послСдний Π³Ρ€Π°Ρ„ΠΈΠΊ – Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ тСстирования удалСния.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ проСктирования ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… для NoSQL

Π—Π΄Π΅ΡΡŒ ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅ Π±Π΅Π· ΡΡŽΡ€ΠΏΡ€ΠΈΠ·ΠΎΠ². Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ 3-5 ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π·Π° константноС врСмя.
ΠŸΡ€ΠΈΡ‡Π΅ΠΌ, Ρ‡Ρ‚ΠΎ интСрСсно, Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ 4 ΠΈ 5, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… сцСнариСв, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π·Π°ΠΌΠ΅Ρ‚Π½ΡƒΡŽ Ρ‡ΡƒΡ‚ΡŒ Ρ…ΡƒΠ΄ΡˆΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Ρ‡Π΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ 3. По всСй видимости, опСрация удалСния строки – Π±ΠΎΠ»Π΅Π΅ затратная, Π½Π΅ΠΆΠ΅Π»ΠΈ опСрация удалСния ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ, Ρ‡Ρ‚ΠΎ Π² Ρ†Π΅Π»ΠΎΠΌ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ 1 ΠΈ 2, ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎ, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ рост Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠŸΡ€ΠΈ этом Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ 2 ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° 1 – ΠΈΠ·-Π·Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΠΎ Β«ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Π½ΠΈΡŽΒ» ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ count.

ΠžΠ±Ρ‰ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄Ρ‹ экспСримСнта:

  • Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ 3-5 Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Π±ΠžΠ»ΡŒΡˆΡƒΡŽ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ прСимущСства HBase; ΠΏΡ€ΠΈ этом ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ отличаСтся Π΄Ρ€ΡƒΠ³ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³Π° Π½Π° константу ΠΈ Π½Π΅ зависит ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° сСти.
  • Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ 4 ΠΈ 5 Π½Π΅ Π±Ρ‹Π»Π° зафиксирована. Но это Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ 5 Π½Π΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π’ΠΏΠΎΠ»Π½Π΅ вСроятно, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ сцСнарий экспСримСнта с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Π’Π’Π₯ тСстового стСнда Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π΅Π΅ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ.
  • Π₯Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ роста Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ «бизнСс-ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉΒ» с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π² Ρ†Π΅Π»ΠΎΠΌ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΠ» ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Ρ€Π°Π½Π΅Π΅ тСорСтичСскиС Π²Ρ‹ΠΊΠ»Π°Π΄ΠΊΠΈ для всСх Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ².

Π­ΠΏΠΈΠ»ΠΎΠ³

ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π³Ρ€ΡƒΠ±Ρ‹Π΅ экспСримСнты Π½Π΅ слСдуСт Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΡƒΡŽ истину. Π•ΡΡ‚ΡŒ мноТСство Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ ΡƒΡ‡Ρ‚Π΅Π½Ρ‹ ΠΈ вносили искаТСния Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ (особСнно Ρ…ΠΎΡ€ΠΎΡˆΠΎ эти Ρ„Π»ΡƒΠΊΡ‚ΡƒΠ°Ρ†ΠΈΠΈ Π²ΠΈΠ΄Π½Ρ‹ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ°Ρ… ΠΏΡ€ΠΈ нСбольшом Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ сСти). НапримСр, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ thrift, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ happybase, объСм ΠΈ способ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ, которая Ρƒ мСня Π±Ρ‹Π»Π° написана Π½Π° Python (Π½Π΅ Π±Π΅Ρ€ΡƒΡΡŒ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π±Ρ‹Π» написан ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ ΠΈ эффСктивно использовал возмоТности всСх ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚), Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ особСнности ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ HBase, фоновая Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Windows 10 Π½Π° ΠΌΠΎΠ΅ΠΌ Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ΅ ΠΈ Ρ‚.ΠΏ. Π’ Ρ†Π΅Π»ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС тСорСтичСскиС Π²Ρ‹ΠΊΠ»Π°Π΄ΠΊΠΈ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ свою ΡΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Ну ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠΏΡ€ΠΎΠ²Π΅Ρ€Π³Π½ΡƒΡ‚ΡŒ ΠΈΡ… Ρ‚Π°ΠΊΠΈΠΌ Π²ΠΎΡ‚ «наскоком Π² Π»ΠΎΠ±Β» Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ.

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ β€” Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ всСм, ΠΊΡ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² HBase: Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΎΠΏΡ‹Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с рСляционными Π±Π°Π·Π°ΠΌΠΈ ΠΈ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ Β«Π·Π°ΠΏΠΎΠ²Π΅Π΄ΠΈΒ»:

  • ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΡ, ΠΈΠ΄Π΅ΠΌ ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ шаблонов манипуляции с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π° Π½Π΅ ΠΎΡ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области
  • Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ доступ (Π±Π΅Π· full table scan) – Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ
  • ДСнормализация
  • Π Π°Π·Π½Ρ‹Π΅ строки ΠΌΠΎΠ³Ρƒ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ
  • ДинамичСский состав ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com