JavaRush /Java blogi /Random-UZ /Dasturchilar uchun NoSQL bo'yicha qo'llanma

Dasturchilar uchun NoSQL bo'yicha qo'llanma

Guruhda nashr etilgan
Agar siz backend ishlab chiqish va Big Data tendentsiyalarini kuzatayotgan bo'lsangiz, so'nggi yillarda NoSQL ma'lumotlar bazalari atrofidagi shov-shuvlarni allaqachon payqagan bo'lsangiz kerak . Ba'zi odamlar ma'lumotlar bazasiga bunday yondashuvdan ilhomlangan bo'lsa, boshqalari unda qandaydir hiyla yashiringan deb o'ylashadi: ulardagi ma'lumotlar modellari odatiy relyatsion ma'lumotlar bazalari bilan bir xil emas, amaliy dasturlash interfeyslari g'ayrioddiy va ilovalar ko'pincha tushunarsiz. NoSQL dasturchi uchun qo'llanma - 1Ushbu maqolada men nima uchun ular birinchi navbatda yaratilganligi, bu NoSQL ma'lumotlar bazalari, ular qanday muammolarni hal qilishlari va nima uchun juda ko'p turli xil ma'lumotlar bazalari birdaniga kerak bo'lishini aytib beraman. Agar siz NoSQL-ga yangi bo'lsangiz, maqolaning oxirgi qismi sizni qiziqtirishi mumkin, unda NoSQL ma'lumotlar bazasi turlari ro'yxati keltirilgan, menimcha, ushbu sohani to'liq tushunish uchun birinchi navbatda o'rganishga arziydi.

Nima uchun bizga to'satdan yangi ma'lumotlar bazasi kerak?

Siz hayron bo'lishingiz mumkin: relyatsion ma'lumotlar bazalarida nima noto'g'ri? Gap shundaki, ular ko'p yillar davomida haqiqatan ham yaxshi ishladilar, ammo endi ular endi hal qila olmaydigan muammo bor. Ba'zi prognozlarga ko'ra, 2018 yilda insoniyat soniyasiga 50 000 gigabayt ma'lumot ishlab chiqaradi. Bu juda katta miqdordagi ma'lumotlar! Uni saqlash va qayta ishlash jiddiy muhandislik muammosini keltirib chiqaradi. Eng yomoni, bu hajm doimiy ravishda o'sib bormoqda. Ma'lum bo'lishicha, relyatsion ma'lumotlar bazalari haqiqatan ham katta hajmdagi ma'lumotlar bilan ishlash uchun juda mos emas. Ular bitta mashinada ishlash uchun mo'ljallangan va agar siz ko'proq so'rovlarni bajarishni istasangiz, unda yagona variant - ko'proq RAM va kuchliroq protsessorga ega kompyuterni sotib olish. Afsuski, bitta mashina bajara oladigan so'rovlar soni cheklangan va bir nechta mashinalar bo'ylab taqsimlangan ish uchun bizga boshqa ma'lumotlar bazasi texnologiyasi kerak. Albatta, ba'zi o'quvchilar bu nuqtada kulishadi va relyatsion ma'lumotlar bazasida bir nechta mashinalardan foydalanishning ikkita keng tarqalgan usuli borligini aytishadi: replikatsiya va parchalanish. Bu to'g'ri, lekin bu usullar bizning vazifalarimizni engish uchun etarli emas. O'qish replikatsiyasi - bu har bir ma'lumotlar bazasi yangilanishi faqat o'qish so'rovlarini bajara oladigan boshqa mashinalarga tarqatiladigan usul. Bunday holda, barcha o'zgarishlar asosiy tugun deb ataladigan bitta server tomonidan amalga oshiriladi, o'qish replikalari deb ataladigan boshqa serverlar esa faqat ma'lumotlar nusxalarini saqlaydi. Foydalanuvchi har qanday mashinadan o'qishi mumkin, lekin ma'lumotlarni faqat asosiy tugun orqali o'zgartirishi mumkin. Bu qulay va juda mashhur usul, lekin u faqat ko'proq o'qish so'rovlarini qayta ishlash imkonini beradi va hech qanday tarzda kerakli hajmdagi ma'lumotlarni qayta ishlash muammosini hal qilmaydi.
NoSQL dasturchi uchun qo'llanma - 2
Rasmda:
Yetakchi (o'qish va yozish): Etakchi tugun (o'qish va yozish)
O'qish uchun nusxalar (faqat o'qish uchun): O'qish replikalari (faqat o'qish uchun)
Sharding - bu relyatsion ma'lumotlar bazasining bir nechta nusxalarini ishlatadigan yana bir mashhur yondashuv. Ularning har biri ma'lumotlarning bir qismi uchun yozish va o'qish operatsiyalarini bajaradi. Agar ma'lumotlar bazasi mijozlar haqidagi ma'lumotlarni saqlasa, masalan, shardingdan foydalangan holda, bitta mashina ismlari A harfidan boshlangan mijozlar uchun barcha so'rovlarni bajarishi mumkin, boshqa mashina ismlari B bilan boshlanadigan mijozlar uchun barcha ma'lumotlarni saqlashi mumkin va hokazo.
NoSQL dasturchi uchun qo'llanma - 3
Rasmda:
Multi-master (ma'lumotlarning bir qismini o'qish va yozish): Bir nechta asosiy tugunlar (ma'lumotlarning o'qish va yozish qismlari)
Sharding sizga ko'proq ma'lumotlarni yozib olishga imkon bersa-da, bunday ma'lumotlar bazasini boshqarish haqiqiy dahshatli tush: siz ma'lumotlarni mashinalar bo'ylab tekislashingiz va kerak bo'lganda klasterni har ikki yo'nalishda masshtablashingiz kerak. Nazariy jihatdan oddiy ko'rinsa-da, uni to'g'ri qabul qilish juda qiyin.

Relyatsion ma'lumotlar bazalarini yaxshilash mumkinmi?

O'ylaymanki, siz allaqachon relyatsion ma'lumotlar bazalari zamonaviy dunyoda yaratilgan ma'lumotlar hajmi uchun eng mos emasligiga ishongansiz. Garchi, siz hali ham bir nechta mashinalarda samarali ishlashi mumkin bo'lgan "yaxshiroq" relyatsion ma'lumotlar bazasini hali hech kim yaratmaganiga hayron bo'lishingiz mumkin. Bu texnologiya hali ishlab chiqilmagandek tuyulishi mumkin va tez orada taqsimlangan relyatsion ma'lumotlar bazalari paydo bo'ladi. Afsuski, bu sodir bo'lmaydi. Bu matematik jihatdan mumkin emas va bu haqda hech narsa qilish mumkin emas. Nima uchun bu shunday ekanligini tushunish uchun siz CAP teoremasiga (aka Brewer teoremasi) qarashingiz kerak. Bu 1999 yilda isbotlangan va unda bir nechta mashinalarda ishlaydigan taqsimlangan ma'lumotlar bazasi quyidagi uchta xususiyatga ega bo'lishi mumkinligi ta'kidlangan: Muvofiqlik - har qanday o'qish operatsiyasi oxirgi mos keladigan yozish operatsiyasining natijalarini qaytaradi. Agar tizim izchil bo'lsa, yangi ma'lumotlarni yozgandan so'ng, eski, allaqachon qayta yozilgan ma'lumotlarni o'qish mumkin emas. Mavjudlik ( Mavjudlik ) - taqsimlangan tizim istalgan vaqtda kiruvchi so'rovga xizmat ko'rsatishi va xatosiz javob qaytarishi mumkin. Bo'limlarga tolerantlik - ma'lumotlar bazasi o'qish va yozish so'rovlariga javob berishda davom etadi, hatto uning ba'zi serverlari vaqtincha bir-biri bilan aloqa qila olmagan bo'lsa ham. Ushbu vaqtinchalik nosozlik tarmoq ulanishining nosozligi deb ataladi va serverning sekin ishlashi tufayli jismoniy tarmoq muammolaridan tortib tarmoq uskunasiga jismoniy shikastlanishgacha bo'lgan turli omillar tufayli yuzaga kelishi mumkin. Bu xususiyatlarning barchasi, albatta, qulay va biz ularni birlashtirish uchun ma'lumotlar bazasini xohlaymiz. Hech bir aqli raso ishlab chiquvchi, aytaylik, evaziga hech narsa olmasdan foydalanish imkoniyatidan voz kechishni xohlamaydi. Afsuski, CAP teoremasi ham uchta xususiyatning bir vaqtning o'zida bo'lishi mumkin emasligini aytadi. Buni tushunish oson bo'lmasligi mumkin, ammo bu mumkin. Birinchidan, agar bizga tarqatilgan ma'lumotlar bazasi kerak bo'lsa, u "uzilishga bardoshli" bo'lishi kerak. Bu hatto muhokama qilinmaydi. Uzilishlar har doim sodir bo'ladi va bizning ma'lumotlar bazasi shunga qaramay ishlashi kerak. Keling, nima uchun ham izchillik, ham mavjudlikka erisha olmasligimizni tushunib olaylik. Tasavvur qiling, bizda ikkita mashinada ishlaydigan oddiy ma'lumotlar bazasi bor: A va B. Har qanday foydalanuvchi ikkala mashinaga yozishi mumkin, shundan so'ng ma'lumotlar ikkinchisiga ko'chiriladi.
NoSQL dasturchi uchun qo'llanma - 4
Endi tasavvur qiling-a, bu mashinalar vaqtincha bir-biri bilan bog‘lana olmaydi, B mashinasi esa A mashinasiga ma’lumot jo‘nata olmaydi yoki undan ma’lumotlarni qabul qila olmaydi. Agar ushbu vaqt ichida B mashinasi mijozdan o'qish so'rovini qabul qilsa, uning ikkita varianti mavjud:
  1. Mahalliy maʼlumotlaringizni, hatto eng soʻnggisi boʻlmasa ham, qaytarib oling. Bunday holda, mavjudlikka ustunlik beriladi (hech bo'lmaganda ba'zi ma'lumotlarni, hatto eskirganlarini qaytarish uchun).
  2. Qaytish xatosi. Bunday holda, izchillik afzal ko'riladi: mijoz eskirgan ma'lumotlarni olmaydi, lekin u hech qanday ma'lumotni umuman olmaydi.
NoSQL dasturchi uchun qo'llanma - 5
Rasmda:
Tarmoq bo'limi: Tarmoq ulanishining yo'qolishi
Relyatsion ma'lumotlar bazalari bir vaqtning o'zida "muvofiqlik" va "mavjudlik" xususiyatlarini o'zida mujassamlashtirishga intiladi va shuning uchun taqsimlangan muhitda ishlay olmaydi. Tarqalgan tizimda relyatsion ma'lumotlar bazasining barcha imkoniyatlarini amalga oshirishga urinish yo real emas yoki shunchaki amalga oshirib bo'lmaydigan bo'ladi . Boshqa tomondan, NoSQL ma'lumotlar bazalari miqyoslilik va ishlashga yuqori baho beradi. Ular odatda ulanishlar va tranzaktsiyalar kabi "asosiy" qobiliyatlarga ega emaslar va ma'lumotlar modeli butunlay boshqacha bo'lib chiqadi, ehtimol hatto biron bir tarzda cheklaydi. Bularning barchasi katta hajmdagi ma'lumotlarni saqlash va har qachongidan ham ko'proq so'rovlarni qayta ishlash imkonini beradi.

NoSQL ma'lumotlar bazalari izchillik va mavjudlikni qanday muvozanatlashtiradi?

Sizga shunday tuyulishi mumkinki, agar siz NoSQL ma'lumotlar bazasini tanlasangiz, siz har doim eskirgan ma'lumotlarni olasiz yoki biron bir nosozlik yuz berganda xatolikka yo'l qo'yasiz. Amalda, mavjudlik va izchillik hech qanday holatda yagona imkoniyat emas. Tanlash uchun keng imkoniyatlar mavjud. Relyatsion ma'lumotlar bazalarida bunday imkoniyatlar mavjud emas, lekin NoSQL xuddi shunday tarzda so'rovlar bajarilishini boshqarish imkonini beradi. Qanday bo'lmasin, ular NoSQL ma'lumotlar bazasida yozish yoki o'qish operatsiyalarini bajarishda ikkita parametrni o'rnatishga imkon beradi: W - yozish operatsiyasini bajarishda klasterdagi qancha mashina ma'lumotlarni saqlashni tasdiqlashi kerak . Ma'lumotlaringizni yozadigan mashinalar soni qanchalik ko'p bo'lsa, keyingi o'qish operatsiyasi bo'yicha eng so'nggi ma'lumotlarni o'qish shunchalik oson bo'ladi, lekin u shunchalik uzoq davom etadi. R - qancha mashinadan ma'lumotlarni o'qishni xohlaysiz . Tarqalgan tizimda ma'lumotlarni klasterdagi barcha mashinalarga tarqatish biroz vaqt talab qilishi mumkin, shuning uchun ba'zi serverlar eng so'nggi ma'lumotlarga ega bo'ladi, boshqalari esa orqada qoladi. Ma'lumotlar o'qiladigan mashinalar soni qanchalik ko'p bo'lsa, joriy ma'lumotlarni o'qish imkoniyati shunchalik yuqori bo'ladi. Keling, amaliy misolni ko'rib chiqaylik. Agar sizning klasteringizda beshta kompyuter bo'lsa va siz faqat bittasiga ma'lumotlarni yozib, keyin bitta tasodifiy tanlangan kompyuterdan ma'lumotlarni o'qishga qaror qilsangiz, eskirgan ma'lumotlarni o'qish ehtimoli 80% ga etadi. Boshqa tomondan, bu minimal resurslardan foydalanadi. Shunday qilib, agar eski ma'lumotlar sizga mos bo'lsa, bu unchalik yomon variant emas. Bunda W va R parametrlari 1 ga teng.
NoSQL dasturchi uchun qo'llanma - 6
Boshqa tomondan, agar siz NoSQL ma'lumotlar bazasidagi barcha beshta mashinaga ma'lumot yozsangiz, istalgan mashinadan ma'lumotlarni o'qishingiz mumkin va har safar yangilangan ma'lumotlarni olishingiz kafolatlanadi. Ko'p sonli mashinalarda bir xil operatsiyani bajarish ko'proq vaqt talab etadi, ammo agar siz uchun yangilangan ma'lumotlar muhim bo'lsa, unda siz ushbu variantni tanlashingiz mumkin. Bu holda, W = R = 5. Ma'lumotlar bazasi izchilligi uchun o'qish va yozishning minimal soni qancha bo'lishi kerak? Mana oddiy formula: R + W ≥ N + 1 , bu erda N - klasterdagi mashinalar soni. Bu shuni anglatadiki, beshta server bilan siz R = 2 va W = 4, yoki R = 3 va W = 3 yoki R = 4 va W = 2 ni tanlashingiz mumkin. yozilgan bo'lsa, o'qish har doim eng so'nggi ma'lumotlarga ega kamida bitta mashinadan amalga oshiriladi.
NoSQL dasturchi uchun qo'llanma - 7
DynamoDB kabi boshqa ma'lumotlar bazalari turli cheklovlarga ega va faqat izchil yozishga ruxsat beradi. Har bir ma'lumot uchta serverda saqlanadi va har qanday ma'lumot yozilsa, u uchta mashinadan ikkitasiga yoziladi. Ammo ma'lumotlarni o'qiyotganda siz ikkita variantdan birini tanlashingiz mumkin:
  1. Qat'iy izchil o'qish, unda ma'lumotlar uchtadan ikkita mashinadan o'qiladi va har doim eng so'nggi yozilgan ma'lumotlarni qaytaradi.
  2. Yakuniy izchil o'qish, unda ma'lumotlarni o'qish uchun bitta mashina tasodifiy tanlanadi. Biroq, bu vaqtinchalik eskirgan ma'lumotlarni qaytarishi mumkin.

Nima uchun juda ko'p NoSQL ma'lumotlar bazalari mavjud?

Agar siz dasturiy ta'minotni ishlab chiqish sohasidagi so'nggi yangiliklarni kuzatib boradigan bo'lsangiz, ehtimol siz MongoDB, DynamoDB, Cassandra, Redis va boshqalar kabi ko'plab turli xil NoSQL ma'lumotlar bazalari haqida eshitgansiz. Sizni qiziqtirgandirsiz: nega bizga juda ko'p turli xil NoSQL ma'lumotlar bazalari kerak? Sababi oddiy: turli NoSQL ma'lumotlar bazalari turli muammolarni hal qilish uchun mo'ljallangan. Shuning uchun raqobatdosh ma'lumotlar bazalari soni juda ko'p. NoSQL ma'lumotlar bazalari to'rtta asosiy toifaga bo'linadi:

Hujjatga yo'naltirilgan ma'lumotlar bazalari

Ushbu ma'lumotlar bazalari murakkab ichki hujjatlarni saqlash qobiliyatini ta'minlaydi, aksariyat relyatsion ma'lumotlar bazalari faqat bir o'lchovli qatorlarni qo'llab-quvvatlaydi. Bu xususiyat ko'p hollarda foydali bo'lishi mumkin, masalan, tizimda bir nechta manzilli foydalanuvchi haqidagi ma'lumotlarni saqlash kerak bo'lganda. Hujjatga yo'naltirilgan ma'lumotlar bazasidan foydalanganda, bu holda siz oddiygina manzillar massivini o'z ichiga olgan murakkab ob'ektni saqlashingiz mumkin, relyatsion ma'lumotlar bazasida siz ikkita jadval yaratishingiz kerak bo'ladi: biri foydalanuvchi ma'lumotlari va biri manzillar uchun. Hujjatga yo'naltirilgan ma'lumotlar bazalari ob'ekt modeli va ma'lumotlar modeli o'rtasidagi bo'shliqni ko'paytiradi . PostgreSQL kabi ba'zi relyatsion ma'lumotlar bazalari endi hujjatga yo'naltirilgan saqlashni ham qo'llab-quvvatlaydi, ammo ko'pchilik relyatsion ma'lumotlar bazalarida hali ham bunday imkoniyat yo'q.

Kalit/qiymat ma'lumotlar bazalari

Kalit/qiymat ma'lumotlar bazalari odatda eng oddiy NoSQL modelini amalga oshiradi. Asosan, ular sizga berilgan kalitga ma'lumotlarni yozish va undan foydalanib qayta o'qish imkonini beruvchi taqsimlangan xesh jadvalini taqdim etadi. Kalit/qiymat ma'lumotlar bazalari yuqori darajada kengaytirilishi mumkin va boshqa ma'lumotlar bazalariga qaraganda ancha past kechikishga ega.

Grafik ma'lumotlar bazalari

Ko'pgina mavzular, masalan, ijtimoiy tarmoqlar yoki filmlar va aktyorlar haqidagi ma'lumotlar grafiklar sifatida taqdim etilishi mumkin. Grafikni relyatsion ma'lumotlar bazasi yordamida tasvirlash mumkin bo'lsa-da, bu qiyin va noqulay. Agar sizga grafik ma'lumotlar kerak bo'lsa, grafik haqida ma'lumotni taqsimlangan klasterda saqlashi va grafiklarda algoritmlarni samarali amalga oshirishga imkon beradigan maxsus grafik ma'lumotlar bazasidan foydalanish yaxshiroqdir.

Ustunli ma'lumotlar bazalari

Ustunli ma'lumotlar bazalarining boshqa turlaridan asosiy farqi ma'lumotlarni diskda saqlash usulidir. Relyatsion ma'lumotlar bazalari har bir jadval uchun fayl yaratadi va barcha qatorlar uchun qiymatlarni ketma-ket saqlaydi. Ustunli ma'lumotlar bazalari jadvallaringizdagi har bir ustun uchun fayl yaratadi. Ushbu tuzilma sizga ma'lumotlarni jamlash va ma'lum so'rovlarni yanada samarali bajarish imkonini beradi, ammo ma'lumotlar bunday ma'lumotlar bazalarining cheklovlariga mos kelishini ta'minlashingiz kerak.

Qaysi ma'lumotlar bazasini tanlash kerak?

Ma'lumotlar bazasini tanlash odatda asabiylashtiradigan muammo bo'lib, juda ko'p imkoniyatlar mavjud bo'lsa, u juda qiyin vazifa kabi ko'rinishi mumkin. Yaxshi xabar shundaki, faqat bittasini tanlashning hojati yo'q. Barcha imkoniyatlarni amalga oshiradigan va barcha tizim ma'lumotlariga kirish huquqiga ega bo'lgan yagona monolit dasturni yaratish o'rniga, siz mikroservislar deb ataladigan boshqa zamonaviy namunadan foydalanishingiz mumkin : dasturni mustaqil xizmatlar to'plamiga ajratish. Har bir xizmat o'zining tor muammosini hal qiladi va faqat o'zining ma'lumotlar bazasidan foydalanadi, bu muammoni hal qilish uchun eng mos keladi.

Bularning barchasini qanday o'rganishingiz kerak?

Shunchalik ko'p ma'lumotlar bazalari bilan ularning barchasini o'rganish imkonsiz bo'lib tuyulishi mumkin. Yaxshi xabar: buni qilish shart emas. NoSQL ma'lumotlar bazalarining bir nechta asosiy turlari mavjud va agar ular qanday ishlashini tushunsangiz, boshqalarni tushunish osonroq bo'ladi. Bundan tashqari, ba'zi NoSQL ma'lumotlar bazalari boshqalarga qaraganda ancha tez-tez ishlatiladi, shuning uchun harakatlaringizni eng mashhur echimlarga qaratgan ma'qul. Bu erda eng ko'p ishlatiladigan NoSQL ma'lumotlar bazalari ro'yxati keltirilgan, menimcha, siz ko'rib chiqishingiz kerak:
  1. MongoDB . Ehtimol, bozorda eng mashhur NoSQL ma'lumotlar bazasi. Agar kompaniya o'zining asosiy ma'lumotlar ombori sifatida aloqador ma'lumotlar bazasidan foydalanmasa, u ehtimol MongoDB dan foydalanadi. Bu yaxshi vositalar to'plamiga ega moslashuvchan hujjatlarni saqlash. Karerasining boshida MongoDB ba'zi hollarda ma'lumotlarni yo'qotish uchun yomon obro'ga ega edi , ammo o'shandan beri uning barqarorligi va ishonchliligi sezilarli darajada yaxshilandi. Qo'shimcha ma'lumot olishni istasangiz, ushbu MongoDB kursiga qarang

  2. DynamoDB . Agar siz Amazon Web Services (AWS) dan foydalansangiz, DynamoDB haqida ko'proq bilib olganingiz ma'qul. Bu juda ishonchli, kengaytiriladigan, past kechikishli ma'lumotlar bazasi bo'lib, boy xususiyatlar to'plami va boshqa ko'plab AWS xizmatlari bilan integratsiyalashgan. Eng yaxshi tomoni shundaki, uni o'zingiz joylashtirishingiz shart emas. Minglab so'rovlarni bajara oladigan kengaytiriladigan DynamoDB klasterini o'rnatish bir necha marta bosish kifoya. Agar bu sizni qiziqtirsa, ushbu kursni ko'rib chiqishingiz mumkin.

  3. Neo4j . Eng keng tarqalgan grafik ma'lumotlar bazasi. Bu grafik ma'lumotlar modelidan foydalanmoqchi bo'lganlar uchun mos keladigan kengaytiriladigan va barqaror yechim. Agar siz ko'proq ma'lumot olishni istasangiz, ushbu kursdan boshlang .

  4. Redis . Bu erda tasvirlangan boshqa ma'lumotlar bazalari asosiy dastur ma'lumotlarini saqlash uchun foydalanilganda, Redis asosan keshlarni amalga oshirish va yordamchi ma'lumotlarni saqlash uchun ishlatiladi. Ko'p hollarda yuqorida qayd etilgan ma'lumotlar bazalaridan biri Redis bilan tandemda qo'llaniladi. Qo'shimcha ma'lumot olish uchun ushbu kursni tekshiring .

2018 yilda NoSQL bilan

NoSQL ma'lumotlar bazalari keng va tez rivojlanayotgan sohadir. Ular sizga ilgari tasavvur qilib bo'lmaydigan hajmdagi ma'lumotlarni saqlash va qayta ishlash imkonini beradi, ammo bu qimmatga tushadi. Ushbu ma'lumotlar bazalarida siz relyatsion ma'lumotlar bazalarida tanish bo'lgan ko'pgina xususiyatlar mavjud emas va ulardan foydalanish uchun o'zingizni sozlash qiyin bo'lishi mumkin. Ammo ularni o'rganganingizdan so'ng, siz katta va katta hajmdagi ma'lumotlar hosil bo'lishi bilan juda muhim bo'lishi mumkin bo'lgan hayratlanarli hajmdagi o'qish va yozish so'rovlarini bajara oladigan kengaytiriladigan, taqsimlangan ma'lumotlar bazalarini yaratishingiz mumkin. Asl: https://simpleprogrammer.com/guide-nosql-software-developers/
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION