Apache Cassandra

## Cassandra сургалт 
Cassandra нь Apache-ийн тархсан өгөгдлийн сан бөгөөд энэ нь маш их өргөтгөх боломжтой мөн маш их хэмжээний бүтэцлэгдсэн өгөгдлийг удирдахад зориулагдсан юм. Энэ нь алдаа гарч болох нэг ч цэггүйгээр хангагдсан. 

Энэхүү сургалт нь Cassandra-ийн архитектур, суулгалт, чухал классууд болон интерфэйсийн үндсэн танилцуулгаас эхэлнэ. Үүний дараа CQLSH болон Java API ашиглан түлхүүр, хүснэгт, индекс зэргүүд дээр үүсгэх, өөрчлөх, шинэчлэх, устгах зэрэг үйлдлийг хэрхэн гүйцэтгэх талаар тайлбарлах болно. Энэхүү сургалт нь CQL-д байгаа өгөгдлийн төрөл, цуглуулгууд болон хэрэглэгчийн тодорхойлсон өгөгдлийн төрлийг хэрхэн ашиглах талаар тайлбар зориулалт бүхий бүлгүүдтэй. 
 		 	
Энэ сургалт нь Cassanda-ийн дадал хэвшилтэй болох мөн практик дээр хэрэгжүүлэх эрмэлзэлтэй програм хангамжийн мэргэжилтэнүүдэд маш их хэрэгтэй юм.

**Шаардлага**

Энэ сургалт нь маш энгийн бөгөөд Java програмчлалын үндсэн мэдлэгтэйгээр энд тайлбарлагдсан ойлголтуудыг амархан ойлгох боломжтой.

## Cassandra - Танилцуулга 
Apache Cassandra нь маш их өргөтгөх боломжтой, олон төрлийн сервер дээр их хэмжээний өгөгдлийг удирдах зориулалттай өндөр үзүүлэлттэй тархсан өгөгдлийн сан бөгөөд алдаа гарч болох нэг ч цэггүйгээр хангагдсан юм. Энэ нь NoSQL өгөгдлийн саншийн нэг төрөл юм. NoSQL өгөгдлийн сан гэж юу вэ гэдэг ойлголтыг эхлээд үзье. 

### **NoSQLDatabase** 
NoSQL өгөгдлийн сан (заримдаа **Зөвхөн SQL Биш** гэж нэрлэгддэг) нь өгөгдлийн хадгалах, сэргээх механизмаар хангагдсан харьцаа өгөгдлийн санд ашиглагддаг хүснэгтэн харицаанаас өөр өгөгдлийн сан юм. Эдгээр өгөгдлийн сангууд нь схемгүй, хялбар хуулбарлахыг дэмждэг, энгийн API-тэй эцэст нь тогтвортой мөн их хэмжээний өгөгдлийг удирдаг чаддаг. 

NoSQL өгөгдлийн сангийн үндсэн зорилго нь 
# Энгийн дизайн
# Хэвтээ хэмжээс
# Хүртээмжтэй байдлыг нарийн хянах
NoSQL өгөгдлийн сан нь харьцаа өгөгдлийн сантай харьцуулахад өөр өөр өгөгдлийн бүтцийг ашигладаг. Энэ нь NoSQL-д зарим үйл ажиллагааг хурдан гүйцэтгэдэг. NoSQL өгөгдлийн санг ашиглах нь шийдэх ёстой асуудлаас хамаардаг.

### **NoSQL vs Харьцаа өгөгдлийн сан** 
Cassandra-аас гадна дараах NoSQL өгөгдлийн сангууд нь түгээмэл байдаг:

**Apache HBase** HBase нь нээлттэй эх, харилцан хамааралгүй, Google-ийн BigTable дараа загварчлагдсан тархсан өгөгдлийн сан өгөөд Java дээр бичигдсэн. Энэ нь Apache Hadoop төслийн нэг хэсэг болон хөгжүүлэгдсэн өгөөд HDFS-ийн дээр ажилладаг бөгөөд Hadoop-ийн BigTable-тэй төстэй боломжуудыг олгодог юм.

**MongoDB** MongoDB нь баримт бичиг баримтад чиглэгдсэн өгөгдлийн сангийн систем бөгөөд энэ нь уламжлалт хүснэгтэнд суурилсан өгөгдлийн сангийн бүтцээс зайлсхийсэн JSON-той адил динамиз схем бүхий баримтууд нь тодорхой төрлийн хэрэглээний өгөгдлийг нэгтгэх боломжийг илүү хурдан, хялбар болгодог.

### **Apache Cassandra гэж юу вэ?** 
Apache Cassandra нь маг их хэмжээний бүтэцлэгдсэн өгөгдлийн удирдахад зориулагдсан дэлхий даяар тархсан нээлттэй эхийн, тархсан болон төвлөрсөн бус хадгалалтын систем(өгөгдлийн сан) юм. Энэ нь алдаа гарч болох нэг ч цэггүйгээр хангагдсан юм.

Доор дурдсан зүйлс нь Apache Cassandra-ийн онцлох зүйлүүд юм:
* Энэ нь өргөтгөх боломжтой, алдаанд тэсвэртэй, тогтвортой
* Энэ нь баганад чиглэсэн өгөгдлийн сан юм
* Түүний тархалтын загвар нь Amazon-ы Dynamo дээр суурилдаг мөн Google-ийн Bigtable дээрх өгөгдлийн загвар
* Facebook-д үүсгэгдсэн мөн энэ нь харьцаа өгөгдлийн сангийн удирдлагын системээс эрс ялгаатай
* Cassandra нь Dynamo загварын ямар ч алдаагүйгээр хуулбарлахыг хэрэгжүүлдэг гэхдээ илүү хүчирхэг “багана гэр бүл” өгөгдлийн загварыг нэмж өгсөн
* Cassandra-г Facebook, Twitter, Cisco, Rackspace, Ebay, Twitter, Netflix зэрэг олон томоохон компаниуд ашигладаг

### Cassandra-ийн онцлог 
Cassandra нь маш гайхалтай технологийн онцлогоосоо болоод алдартай болсон юм. Cassandra-ийн зарим онцлогууд нь: 

**Налархай хуваарилалт** - Cassandra нь маш сайн өргөтгөх боломжтой; энэ нь шаардлага болгонд илүү олон хэрэглэгчийг болон өгөгдөл байрлуулахад илүү олон төхөөрөмж нэмэх боломжийг олгодог. 

**Үргэлж архитектур дээр** - Cassandra нь алдаа гарч болох нэг ч цэггүйгээр хангагдсан бөгөөд энэ нь алдаа гаргаж болохгүй бизнесийн чухал програмуудад үргэлж бэлэн байдаг. 

**Хурдан шугаман гүйцэтгэл** - Cassandra нь шугаман хэмжээгээр өргөтгөх боломжтой өөрөөр хэлбэл энэ нь кластерийн тоонуудыг зангилааг ихэсгэх үед таны нэвтрүүлэх чадварыг нэмэгдүүлдэг. Тиймээс энэ нь хурдан хариу үйлдэл хийх цагийг хадгалж байдаг. 

**Уян хатан өгөгдөл хадгалалт** - Cassandra нь бүх боломжит өгөгдлийн форматыг багтаадаг. Үүнд: бүтэцлэгдсэн, хагас бүтэцлэгдсэн мөн бүтэцлэгдээгүй. Энэ нь таны хэрэгцээний дагуу өгөгдлийн бүтцэд өөрчлөлтүүдийг динамикаар зохицуулж чадна. 

**Хялбар өгөгдөл хуваарилалт** - Cassandra нь олон тооны өгөгдлийн төвүүдээр өгөгдлийг хуулбарлах замаар хэрэгцээтэй газраа түгээх уян хатан боломжийг олгодог. 

**Гүйлгээний дэмжлэг** - Cassandra нь (Атомчлалтай, Нийцтэй байдал, Салангид мөн Эдэлгээ) зэрэг шинж чанаруудыг дэмждэг. 

**Хурдан бичилт** - Cassandra нь хямд техник хангамж дээр ажиллахаар бүтээгдсэн. Энэ нь гайхалтай хурдан бичдэг болон уншилтын үр ашгийн алдагдалгүйгээр terabyte хэмжээний өгөгдлийг хадгалж чаддаг.

### **Cassandra-ийн түүх** 
* Cassandra нь inbox хайлт хийхээр Facebook-д хөгжүүлэгдсэн
* Энэ нь 2008 оны 7 сард Facebook-ээр нээлттэй эх болсон
* Cassandra нь 2009 оны 3 сард Apache Incubator-оор хүлээн зөвшөөрөгдсөн
* Энэ нь 2010 оны 2 сараас хойш Apache-ийн дээд түвшний төсөл болсон

## Cassandra - Архитектур 
Cassandra-ийн загварчлалын зорилго нь их хэмжээний өгөгдлийн ачааллыг олон тооны зангилааны хооронд алдаа гарч болох нэг ч цэггүйгээр зохицуулагддаг. Cassandra нь зангилаануудын хооронд цэгээс цэгийн хооронд тархсан систем болон өгөгдөл нь кластер дахь бүх зангилаануудыг хооронд тархсан байдаг.
* Кластерийн зангилаа бүр нь ижил үүрэг гүйцэтгэдэг. Зангилаа бүр нь бие даасан байдаг болон нэг цагт бусад зангилаануудтай хоорондоо холбогддог
* Кластерийн зангилаа бүр нь өгөгдөл нь кластерт байрлаж байгаа эсэхээс үл хамааран унших болон бичих хүсэлтийг хүлээн авдаг
* Зангилаа нь унасан үед унших/бичих хүсэлтийг сүлжээний бусад зангилаанаас гүйцэтгэж болно

### **Cassandra-ийн өгөгдлийн хуулбар** 
Cassandra нь кластерийн нэг буюу түүнээс олон тооны зангилааны өгөгдлийн ширхэг бүрийг хувилдаг. Хэрэв зарим нэг зангилаанууд нь хугацаа нь дууссан утгад хариу өгсөн нь илэрвэл Cassandra нь хамгийн сүүлийн утгыг клинт руу буцааж өгдөг. Хамгийн сүүлийн утгыг буцаасны дараа Cassandra нь хуучны утгыг шинэчлэхийн тулд арын засварын ажлыг хийдэг.

**Тэмдэглэл** - Cassandra нь зангилаанууд хоорондоо харилцах болон кластерийн алдаатай зангилаануудыг олоход **Gossip Protocol**-ийг ард нь ашигладаг.

### **Cassandra-ийн бүрэлдэхүүн хэсгүүд** 
Cassandra-ийн гол бүрэлдэхүүн хэсгүүд нь дараах байдалтай байна:
* **Зангилаа** - Энэ нь өгөгдөл хадгалах газар
* **Өгөгдлийн төв** - Энэ нь холбогдох зангилаануудын цуглуулга
* **Кластер** - Кластер нь нэг болон хэд хэдэн өгөгдлийн төвийг агуулсан бүрэлдэхүүн хэсэг
* **Бүртгэл** - Бүртгэл нь Cassandra дахь сүйрэл-сэргээх механизм юм. Бүх бичилтийн үйлдэл нь бүртгэлд бүртгэгдэж байдаг
* **Mem-хүснэгт** - Mem-хүснэгт нь ой санамжийн байрлагчийн өгөгдлийн бүтэц юм. Бүртгэлийн дараа өгөгдөл нь mem-хүснэгт рүү бичигддэг. Зарим тохиолдолд нэг баганын гэр бүлийн хувьд олон mem-хүснэгтүүд байж болдог
* **SSХүснэгт** - Энэ нь контент нь хязгаараас давах үед mem-хүснэгтэд байгаа өгөгдлийг устгасан диск файл юм
* **Bloom шүүлтүүр** - Эдгээр нь элемент нь багцийн гишүүн эсэхийг турших хурдан, бусдаас ялгаатай, алгоритмууд юм. Энэ нь тусгай төрөл бүхий кэш юм. Bloom шүүлтүүрүүд нь query болгоны дараа ханддаг

### **Cassandra Query хэл** 
Хэрэглэгч нь Cassandra Query хэл ашиглан зангилаануудаар дамжуулан Cassandra-д хандаж болно. CQL нь өгөгдлийн сантай хүснэгтүүдийн контейнерт ханддаг. Программистууд нь cqlsh-ийг ашигладаг: SQL-тэй ажиллахад шуурхай эсвэл аппликэйшний хэлний драйверийг тусгаарладаг.

Клинтүүд нь зангилаануудын аль нэг рүү тэдний унших-бичих үйл ажиллагаагар ханддаг. Зангилаа нь клинт болон өгөгдлийг агуулах зангилааны хоорон дахь проксигоор тоголдог.

Бичих үйл ажиллагаа Зангилааны бичих үйлдэл бүр нь зангилаанд бичигдсэн бүртгэлүүдээс олддог. Дараа нь өгөгдлийг mem-хүснэгтэнд хадгална. Mem-хүснэгт нь дүүрсэн бол өгөгдлийг SSХүснэгт өгөгдлийн файл руу бичнэ. Бүх бичилтүүд нь автоматаар хуваагдаж мөн кластерийн туршид хуулбарлагдана. Cassandra нь SSХүснэгтийг нэгтгэж, шаардлагагүй илүү өгөгдлийг хаядаг.

Унших үйл ажиллагаа Унших үйл ажиллагааны явцад Cassandra нь mem-хүснэгтийн утгыг авдаг бөгөөд шаардлагатай өгөгдлийг агуулж буй SSХүснэгтийг олохын тулд bloom шүүлтүүрийг шалгадаг.

## Cassandra - Өгөгдлийн загвар 
Cassandra-ийн өгөгдлийн загвар нь бидний энгийнээр хардаг RDBMS-ээс мэдэгдэхүйц ялгаатай. Энэ бүлэгт Cassandra нь өгөгдлийг хэрхэн хадгалдаг талаарх тоймыг харуулсан.

**Кластер**

Cassandra өгөгдлийн сан нь хамтран ажилладаг хэд хэдэн машинууд дээр тархаж байрладаг. Контейнерийг кластер гэж нэрлэдэг. Алдаа дутагдалыг зохицуулахын тулд бүх зангилаа нь хуулбарыг агуулдаг бөгөөд алдаа гарсан тохиолдолд хуулбарыг цэнэглэдэг. Cassandra нь кластерийн зангилааг цагираган хэлбэрээр зохион байгуулж өгөгдлийг тэдэнд өгдөг.

**Keyspace**

Keyspace нь Cassandra-ийн хамгийн сайн контейнер юм. Cassandra-ийн Keyspace-ийн үндсэн шинж чанарууд нь:

**Хуулбарлах фактор** - Энэ нь кластерийн машин бүрийн тоо бөгөөд энэ нь ижил өгөгдлийн хуулбарыг хүлээж авдаг

**Хуулбарлах байршлын стратеги** - Энэ нь цагираган дахь хуулбаруудыг байрлуулах стратеги юм. Бид **энгийн стратеги** гэх мэт стратегиудтай (rack-aware strategy), **хуучин сүлжээний топологийн стратеги**(rack-aware strategy) мөн с**үлжээний топологийн стратеги** (төв цэг-хуваалцсан стратеги)

**Багана гэр бүл** - Keyspace нь нэг эсвэл хэд хэдэн баганын гэр бүлийн жагсаалтын агуулах юм. Баганын гэр бүл нь эргээд мөрийн цуглуулгын агуулах болдог. Мөр болгон нь эрэмбэлэгдсэн баганыг агуулдаг. Баганын гэр бүл нь таны өгөгдлийн бүтцийг илэрхийлж байдаг. Keyspace болгон нь хамгийн багадаа нэг ба олон баганын гэр бүлтэй байдаг

Keyspace үүсгэх бичиглэлт нь:
 CREATE KEYSPACE Keyspace name
 WITH replication = {'class': 'SimpleStrategy', 'replication_factor'

### **Баганын гэр бүл** 
Баганын гэр бүл нь эрэмбэлэгдсэн мөрийн цуглуулгыг агуулж байдаг. Мөр болгон нь эргээд эрэмбэлэгдсэн багана юм. Доор үзүүлсэн хүснэгтэд харьцаа өгөгдлийн сангийн хүснэгт болон баганын гэр бүлийн ялгааг харуулж байна.

Cassandra-ийн баганын гэр бүлийн шинж чанарууд:

**keys_cached** - Энэ нь SSХүснэгт бүрээр кэшийг хадгалах байршлын тоог илэрхийлдэг.

**rows-cached** - Энэ нь санах ойд бүхэлдээ кэшлэгдсэн контэнтийн мөрийн тоог илэрхийлдэг.

**preload_row_cache** - энэ нь мөрийн кэшийг урьдчилан байрлуулахыг хүсч байгаа эсэхийг тодорхойлно

**Тэмдэглэл** - Баганын гэр бүлийн схемийг засах боломжгүй харьцааа хүснэгтээс ялгаатай нь Cassandra нь мөрүүдийг бүх баганад байлгахыг шаарддаггүй.

### **Багана** 
Cassandra-ийн үндсэн өгөгдлийн бүтэц нь тухайлбал түлхүүр эсвэл баганы нэр, утга мөн цагны тамга гэсэн 3 утгатай. 

### **СуперБагана** 
Супер багана нь тусгай багана тиймээс энэ нь түлхүүр утга бүхий хос байна. Гэвч супер багана нь дэд баганы газрын зургийг хадгалдаг.

Ерөнхийдөө баганы гэр бүл нь бие даасан файлын дискэнд халгадагддаг. Тиймээс гүйцэтгэлийг оновчтой болгодог бөгөөд баганыг хадгалах нь чухал энэ нь ижил баганын гэр бүлтэй хамт хайлт хийх магадлалтай бөгөөд супер багана нь энд ашигтай байж болох юм. 

### **Cassandra болон RDBMS-ийн өгөгдлийн загварууд** 
Доор үзүүлсэн хүснэгтэд Cassandra болон RDBMS-ийн ялгааг харуулж байна.

## Cassandra Installation 
Cassandra-г Линукс орчинд суулгахаасаа өмнө бид  Linux-г ssh (Secure Shell) ашиглан суулгах шаардлагатай болно. Линукс орчинд тохируулахын тулд доор дурдсан алхмуудыг хийнэ үү 
 		 	
**Хэрэглэгч үүсгэх**
	
Эхлээд Hadoop-д зориулж Hadoop файлын системийг Unix файлын системээс тусгаарлаж тусд нь хэрэглэгч үүсгэж өгнө. Хэрэглэгч үүсгэхийн тулд доорх алхмуудыг дагана уу.
 	"su" командыг ашиглан нээж  болно.
	
Хэрэглэгчээс хэрэглэгч "useradd username" гэсэн командаар үүсгэнэ.	
Одоо та хэрэглэгчийн бүртгэлийг "su username" гэсэн командаар  нээж болно.
Линукс терминалыг нээж, хэрэглэгчийг үүсгэхийн тулд дараах командыг бичнэ үү.

 $ su	
 password:	
 useradd hadoop
 passwd hadoop
 New passwd:
 Retype new passwd
	
**SSH тохиргоо , түлхүүр үүсгэх**       
 	
SSH тохиргоо нь эхлүүлэх, зогсоох, тараах димон бүрхүүл ажиллуулах зэрэг хэсэг  дээр өөр өөр үйлдлүүдийг гүйцэтгэхэд шаардагддаг. Hadoop-ийн өөр  хэрэглэгчдийг баталгаажуулахын тулд Hadoop хэрэглэгчийн нийтийн / хувийн түлхүүр хосыг өгөх, өөр хэрэглэгчтэй хуваалцах шаардлагатай.

SSH ашиглан түлхүүр утгыг үүсгэхэд дараах командууд ашиглагддаг:	

Нийтийн  түлхүүрүүдийг id_rsa.pub-аас зөвшөөрөгдсөн түлхүүрийг хуулах
Хэрэглэгчд санал болгох,
Зөвшөөрөгдсөн түлхүүрийн  файлыг тус тусд нь уншиж, бичих зөвшөөрлийг бичнэ.
 	
 $ ssh-keygen -t rsa
 $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_key	
 $ chmod 0600 ~/.ssh/authorized_keys
		
**Ssh-г баталгаажуулах**
	
 ssh localhost
 	
**Java суулгах нь**           
 
Жава нь  Cassandra-д чухал  шаардлагатай  юм. Юуны өмнө, доор дурдсан командаар  Java системийг өөрийн систем дээр шалгаж үзэх хэрэгтэй:
 
 $java -version
 	
Бүгд  хэвийн ажилладаг  ба  энэ нь танд дараах гаралтыг өгнө.
 	
 java version "1.7.0_71"	
 Java(TM) SE Runtime Environment (build 1.7.0_71-b13)	
 Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)
 	
Хэрэв таны системд Жава байхгүй бол доорх алхмуудыг хийнэ үү
	
1-р алхам
 Жава (JDK  - X64.tar.gz)  татаж авна уу.
	
Дараа нь jdk-7u71-linux-x64.tar.gz таны системд татагдах болно.	
2-р алхам 
jdk-7u71-linux-x64.gz файлыг дараах командуудыг ашиглан задлана.

 $ cd Downloads/	
 $ ls
 jdk-7u71-linux-x64.gz	
 $ tar zxf jdk-7u71-linux-x64.gz
 $ ls
 jdk1.7.0_71 jdk-7u71-linux-x64.gz
 
3-р алхам                                                                                                                                                                       Жава-г бүх хэрэглэгчдэд хүргэхийн тулд үүнийг "/ usr / local /" рүү  шилжих боломжтой.  Үүнийг  нээхдээ  дараах командыг бичнэ үү
 $ su
 password:	
 mv jdk1.7.0_71 /usr/local/
 exit
4-р алхам  
 
PATH болон JAVA_HOME хувьсагчуудыг тохируулахдаа дараах командыг ~ / .bashrc файлд нэмнэ	
 export JAVA_HOME = /usr/local/jdk1.7.0_71	
 export PATH = $PATH:$JAVA_HOME/bin

Одоо ажиллаж байгаа  системд бүх өөрчлөлтүүдийг  оруулна.	
 $ source ~/.bashrc

5-р алхам  
	
Жава хувилбаруудыг тохируулахын тулд дараах командуудыг ашиглана.	
 alternatives --install /usr/bin/java java usr/local/java/bin/java 2
 alternatives --install /usr/bin/javac javac usr/local/java/bin/javac 2	
 alternatives --install /usr/bin/jar jar usr/local/java/bin/jar 2
 alternatives --set java usr/local/java/bin/java
 alternatives --set javac usr/local/java/bin/javac
 alternatives --set jar usr/local/java/bin/jar

Одоо java -version командыг терминал дээр тайлбарласны дагуу ашиглана.
 	
**Замыг тохируулах**
	
Cassandra  замыг "/.bahrc" -д доор үзүүлэв.
  [hadoop@linux ~]$ gedit ~/.bashrc	
 export CASSANDRA_HOME = ~/cassandra
 export PATH = $PATH:$CASSANDRA_HOME/bin
	
**Cassandra  татах** 
 	
Apache Cassandra-г Link Cassandra дээрээс дараах командыг ашиглан татаж авах боломжтой .
  $ wget http://supergsego.com/apache/cassandra/2.1.2/apache-cassandra-2.1.2-bin.tar.gz
	
Unzip Cassandra-г zxvf командыг ашиглан  доор харуулав.	
 $ tar zxvf apache-cassandra-2.1.2-bin.tar.gz.
	
Татаж авсан файлыг Cassandra нэртэй шинэ сан үүсгээд доор татсан шиг татна	
 $ mkdir Cassandra
 $ mv apache-cassandra-2.1.2/* cassandra.
 
 **Cassandra тохируулах**
 	
Cassandra bin файлын санд байх cassandra.yaml файлыг нээнэ үү:	
 $ gedit cassandra.yaml
 
Тэмдэглэл: Хэрэв та debla эсвэл rpm хуудаснаас Cassandra суулгасан бол тохиргооны файлууд нь байх болно
 
Cassandra-ийн / etc / cassandra санд байрладаг cassandra.yaml файлыг нээнэ. Дараах тохируулгыг шалгана уу. 
 	
Анхдагчаар эдгээр утгууд нь заасан сангууд руу тохируулагдана.
  data_file_directories “/var/lib/cassandra/data”	
 commitlog_directory “/var/lib/cassandra/commitlog”
 saved_caches_directory “/var/lib/cassandra/saved_caches”

Эдгээр сангууд байгаа бөгөөд доор үзүүлсэн шигээр бичиж болно.
 	
**Лавлах үүсгэх** 
 		 
Хэрэглэгчийн хувьд хоёр санг / var / lib / cassandra болон /var./lib/cassandra сан дотор үүсгэх хэрэгтэй.Cassandra өөрийн өгөгдлийг бичдэг. 
	
**Хавтасд зөвшөөрөл өгөх**		 

 [root@linux cassandra]# mkdir /var/lib/cassandra	
 [root@linux cassandra]# mkdir /var/log/cassandra

Доор үзүүлсэн шиг шинээр үүсгэсэн хавтаст унших-бичих зөвшөөрлийг өгнө.
  [root@linux /]# chmod 777 /var/lib/cassandra	
 [root@linux /]# chmod 777 /var/log/cassandra 		 
**Cassandra эхлүүлэх**

Cassandra-г эхлүүлэхийн тулд терминалын цонхыг нээхийн тулд Cassandra home directory / home руу залгах хэрэгтэй.
Cassandra-г задалсан бөгөөд Cassandra-н сервер эхлүүлэхийн тулд дараах командыг ажиллуулаарай.	
 $ cd $CASSANDRA_HOME	
 $./bin/cassandra -f 
f тохируулгыг ашиглах нь Cassandra нүүрэн талд байрлахыг хэлдэг үйл явц юм.	Бүх зүйл амжилттай  болвол Cassandra серверийн эхлэлийг харж болно.		 

**Програмчлалын орчин**
		 
Cassandra-н програмыг тохируулахын тулд дараах файлын файлуудыг татаж авах хэрэгтэй:
 
 . slf4j-api-1.7.5.jar	
 cassandra-driver-core-2.0.2.jar
 guava-16.0.1.jar
 metrics-core-3.0.2.jar
 netty-3.9.0.Final.jar
 
Тэдгээрийг тусдаа хавтсанд байрлуул. Жишээ нь, бид  "Cassandrs” нэрлэсэн фолдерт татаж байна.
	
Энэ хавтсанд байгаа classpath-ийг ".bashrc" -д доор үзүүлсэн шиг тохируулна.	
 [hadoop@linux ~]$ gedit ~/.bashrc
  //Set the following class path in the .bashrc file.
 export CLASSPATH = $CLASSPATH:/home/hadoop/Cassandra_jars/*
	
**Eclipse орчин**
 	
Eclipse  нээгээд  Cassandra _Examples нэртэй шинэ сан үүсгэнэ.Хавтасны баруун товчлуур дээр дарж, Build Path → Доор үзүүлсэн шиг Build Path-г тохируулна уу.Энэ нь шинж чанарын цонхыг нээнэ. Сангийн  Libraries tab дотроос  add External JARs орно.  Jar  файлыг хадгалсан сан руугаа шилжүүлнэ үү. 5  jar  файлын форматыг сонгож доор үзүүлсэн шиг OK дарна уу.
Дээрх Libraries дуудсаны дагуу дараах  бүх шаардлагатай jar-г харж болно.
	
 Cassandra хавтас нь maven ашиглан  pom.xml  өгсөн юм.	
 	
   	
      
```
src
     	
         
            maven-compiler-plugin
            3.1
                  1.7
```

                  1.7
               					
         
      
    
   
      
         org.slf4j
         slf4j-api
         1.7.5
      
      
         com.datastax.cassandra	
         cassandra-driver-core
         2.0.2
      
      
         com.google.guava
         guava
         16.0.1
      
      
         com.codahale.metrics
         metrics-core
         3.0.2
      
      
         io.netty
         netty
         3.9.0.Final
      
   
 
 
−	
## Cassandra - Referenced Api
Бүлэг

Энэ бүлэг нь үндсэн хөдөлгөгч үндсэн цэг юм. Энэ нь com.datastax.driver.core багц юм.	

Cluster.Builder-Энэ хэсэг нь Cluster.Builder классыг илэрхийлэхэд хэрэглэгддэг.	

Энэ интерфэйс нь  Cassandra бүлгийн холболтыг агуулдаг. Энэ интерфэйсийг ашиглан та CQL хүсэлтийг гүйцэтгэж болно. Энэ нь com.datastax.driver.core багц юм.
 	

## Cassandra - Cqlsh
Энэ бүлэг нь Cassandra хайлтын хэлийг танилцуулж түүний командуудыг хэрхэн ашиглахыг тайлбарладаг.	
Анхдагч байдлаар, Cassandra нь хэрэглэгчийн харилцах боломжийг олгодог Cassandra хайлтын хэлийг (cqlsh) түргэн шуурхай болгодог.  Cassandra Query Language (CQL) -ийг ашиглан ажиллуулж болно.
Та Cqlsh командыг ашиглах нь 
 
 схемийг тодорхойлж,	

 өгөгдөл оруулах, болон	

хайлт хийх.
 
**Cqlsh-ээс эхэлнэ**
 	
Cqlsh эхлэлүүлэхэд  доор дурдсан шиг cqlsh командыг ашиглана. Энэ нь Cassandra cqlsh командыг гаралтын хэлбэрээр өгдөг.
 	
 [hadoop@linux bin]$ cqlsh	
 Connected to Test Cluster at 127.0.0.1:9042.
 [cqlsh 5.0.1 | Cassandra 2.1.2 | CQL spec 3.2.0 | Native protocol v3]
 Use HELP for help.
 cqlsh>
 
Cqlsh- Дээр тайлбарласны дагуу энэ команд  нь cqlsh командыг эхлүүлэхэд хэрэглэгддэг. Үүнээс гадна, энэ нь бас хэд хэдэн сонголтуудыг дэмждэг. Дараах хүснэгт нь cqlsh болон тэдгээрийн хэрэглээний бүх тохиргоонуудыг тайлбарладаг
	

 
**Cqlsh команд** 

Cqlsh нь хэрэглэгчид тэдгээрийг харилцах боломжийг олгодог цөөн коммандтай байдаг. Дараах командууд байна.  
 
Shell командуудыг баримтжуулах
 
Cqlsh-ийн баримтжуулсан бүрхүүлийн командуудыг доор өгөв. Эдгээр нь тусламжийн сэдвүүдийг үзүүлэх, жишээ нь cqlsh-аас гарах, тайлбарлах гэх мэт ажлуудыг гүйцэтгэхэд хэрэглэгддэг командууд юм.	
*Help-Дүрслэл нь бүх cqlsh командуудад зориулсан сэдвүүдэд тусалдаг.	
*CAPTURE-командын гаралтыг аваад файл руу нэмнэ.
*CONSISTENCY-Одоогийн тууштай байдлын түвшинг харуулах, эсвэл шинэ тогтвортой байдлын түвшинг тогтооно.
*COPY-Cassandra-ийн хуулбар болон өгөгдлийг хуулбарлах.
*DESCRIBE-Cassandra болон түүний объектуудын одоогийн классуудыг тайлбарладаг.
*EXPAND-Тухайн босоо чиглэлд хайлтын үр дүнг өргөтгөнө.
*EXIT - Энэ тушаалыг ашиглан cqlsh-г төгсгөж болно.
*PAGING - Хайлтын пейжийг идэвхжүүлж эсвэл идэвхгүй болгодог.
*SHOW - Cassandra хувилбар, хост буюу өгөгдлийн төрлийн таамаглал зэрэг одоогийн cqlsh горимын дэлгэрэнгүй мэдээллийг харуулна.
*SOURCE - CQL мэдэгдлүүд агуулсан файлыг ажиллуулдаг.
*TRACING - Хүсэлтийг дагахыг идэвхжүүлэх эсвэл идэвхгүй болгох.

**CQL өгөгдлийн тодорхойлолтууд командууд**	
*GREATE KEYSPACE - Cassandra дээр KeySpace үүсгэдэг.
*USE - үүсгэсэн KeySpace-д холбогддог.
*ALTER KEYSPACE - KeySpace-ийн шинж чанаруудыг өөрчилдөг.
*DROP KEYSPACE - KeySpace устгах
*GREATE  TABLE-Space дээр хүснэгт үүсгэх
*ALTER TABLE: Хүснэгтийн баганын шинж чанарыг өөрчилдөг.
*DROP table - хүснэгтийг устгах.
*TRUNCATE - Хүснэгтийн бүх өгөгдлийг устгана.
*INDEX үүсгэх - Хүснэгтийн нэг багана дээр шинэ индексийг тодорхойлно.

**CQL өгөгдлийн  командууд**
*INSERT - Хүснэгтийн мөрөнд багана нэмэх	
*UPDATE - Нэг мөрийн багануудыг шинэчилдэг.	
*DELETE - Хүснэгтийн өгөгдлийг устгадаг.
*BATCH - Олон DML мэдэгдлийг нэгэн зэрэг гүйцэтгэдэг.
 
**CQL заалтууд**	
*SELECT - Энэ бүлэг нь хүснэгтийн өгөгдлийг уншдаг
*WHERE - Энд тодорхой өгөгдлийг уншуулахын тулд хаана хэрэглэхийг заана.
*ORDERBY - Orderby заалтыг тодорхой дарааллаар тодорхой өгөгдлийг уншиж сонгохын хамт ашигладаг.
	
## Cassandra - Shell Commands
Cassandra нь CQL коммандаас гадна дүн шинжилгээний тушаалыг баримтжуулдаг. Доор дурдсанчлан Cassandra нь дараах командуудыг баримтжуулсан байна.

Туслах	

HELP команд нь бүх cqlsh командуудын ерөнхий агуулга, товч тайлбарыг харуулна. Доорх бол тусламжийн командын хэрэглээ юм.	
 cqlsh> help	
 Documented shell commands:
 ===========================
 CAPTURE COPY DESCRIBE EXPAND PAGING SOURCE
 CONSISTENCY DESC EXIT HELP SHOW TRACING.	
 CQL help topics:
 ================	
 ALTER           CREATE_TABLE_OPTIONS       SELECT
 ALTER_ADD       CREATE_TABLE_TYPES         SELECT_COLUMNFAMILY	
 ALTER_ALTER     CREATE_USER                SELECT_EXPR
 ALTER_DROP      DELETE                     SELECT_LIMIT
 ALTER_RENAME    DELETE_COLUMNS             SELECT_TABLE

**Capture**
	
Энэ команд нь командын гаралтыг авч, файлд нэмнэ. Жишээ нь Outputfile нэртэй файл руу гаралтаа оруулаад дараах кодыг хараарай	
 cqlsh> CAPTURE '/home/hadoop/CassandraProgs/Outputfile'

Терминал доторх ямар ч команд  бичиж байх үед өгөгдлийг өгсөн файлаар гаргана. Доор ашигласан команд  болон гаралтын файлын хормын хувилбар юм.	
 cqlsh:tutorialspoint> select * from emp;

Та дараах командыг ашиглан барьж болно.
 	
 cqlsh:tutorialspoint> capture off;		 

**Тогтвортой байдал** 		 

Энэ команд  нь одоогийн тогтвортой байдлын түвшинг харуулж байгаа бөгөөд  шинэ тогтвортой байдлын түвшинг тогтоодог.
  qlsh:tutorialspoint> CONSISTENCY
 Current consistency level is 1.

**Хуулах**
	
Энэ команд нь Cassandra-аас өгөгдөлд файлыг хуулдаг. Доорх жишээнүүд нь файлын myfile-д өгсөн хоосон хүснэгтийг хуулах жишээ юм.
	
 cqlsh:tutorialspoint> COPY emp (emp_id, emp_city, emp_name, emp_phone,emp_sal) TO ‘myfile’;	
 4 rows exported in 0.034 seconds.

Хэрвээ та файлаа нээж, шалгаж байвал доор үзүүлсэн шиг хуулбарыг олж болно.
		 

**Тайлбарлах**
 	
Энэ команд нь Cassandra-ийн одоогийн кластер болон түүний объектуудыг тайлбарлах болно. Энэ командын хувилбарыг доор тайлбарлав.
	
Кластерийг тайлбарлах - Энэ комманд кластерийн талаар мэдээлэл өгнө.	
 cqlsh:tutorialspoint> describe cluster;	
 Cluster: Test Cluster	
 Partitioner: Murmur3Partitioner	
 Range ownership:	
                  -658380912249644557 [127.0.0.1]
 	
                  -2833890865268921414 [127.0.0.1]
 	
                  -6792159006375935836 [127.0.0.1] 
 
**Түлхүүр үгсийг тайлбарлах** - Энэ команд нь кластер дахь бүх түлхүүрүүдийг жагсаадаг. Доор дурдсан командыг ашиглах болно.	
 cqlsh:tutorialspoint> describe keyspaces;	
 system_traces system tp tutorialspoint

**Хүснэгтийг тайлбарлах** - Энэ команд нь бүх локал хүснэгтийг жагсаадаг. Доор дурдсан командыг ашиглах болно.	
 cqlsh:tutorialspoint> describe tables;	
 emp

**Хүснэгтийг тайлбарлах **- Энэ команд нь хүснэгтийг тайлбарлах болно. Доор дурдсан командыг ашиглах болно.	
 cqlsh:tutorialspoint> describe table emp;
 CREATE TABLE tutorialspoint.emp (
   emp_id int PRIMARY KEY,	
   emp_city text,
   emp_name text,
   emp_phone varint,
   emp_sal varint
 ) WITH bloom_filter_fp_chance = 0.01
   AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'
   AND comment = ''
   AND compaction = {'min_threshold': '4', 'class':
   'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy',
   'max_threshold': '32'}
    AND compression = {'sstable_compression':
   'org.apache.cassandra.io.compress.LZ4Compressor'}
   AND dclocal_read_repair_chance = 0.1
   AND default_time_to_live = 0
   AND gc_grace_seconds = 864000
   AND max_index_interval = 2048
   AND memtable_flush_period_in_ms = 0
   AND min_index_interval = 128
   AND read_repair_chance = 0.0
   AND speculative_retry = '99.0PERCENTILE';
 CREATE INDEX emp_emp_sal_idx ON tutorialspoint.emp (emp_sal);

**Төрөл тайлбарлах**	

Энэ команд нь хэрэглэгчийн тодорхойлсон өгөгдлийн төрлийг тодорхойлоход хэрэглэгддэг. Доор дурдсан командыг ашиглах болно.
 cqlsh:tutorialspoint> describe type card_details;	
 CREATE TYPE tutorialspoint.card_details (
   num int,
   pin int,
   name text,
   cvv int,
   phone set,
   mail text
 );
 
**Зүйлээр тайлбарлах**
 	
Энэ команд нь хэрэглэгчийн тодорхойлсон өгөгдлийн төрлийг жагсаав. Доор дурдсан командыг ашиглах болно. Хэрэглэгчийн тодорхойлсон өгөгдлийн төрлүүд байдаг гэж үзье: карт болон карт_details	
 cqlsh:tutorialspoint> DESCRIBE TYPES;
 card_details card

**Өргөжүүлэлт  хийх** 		 

Энэ тушаал нь гаралтыг өргөтгөхөд хэрэглэгддэг. Энэ командыг ашиглахаасаа өмнө өргөтгөх командыг идэвхжүүлэх хэрэгтэй. Доор дурдсан тушаалыг ашиглах болно.
  cqlsh:tutorialspoint> expand on;	
 cqlsh:tutorialspoint> select * from emp;
 @ Row 1
 -----------+------------
    emp_id | 1
  emp_city | Hyderabad
  emp_name | ram
 emp_phone | 9848022338
   emp_sal | 50000
  @ Row 2
 -----------+------------
    emp_id | 2
  emp_city | Delhi
  emp_name | robin
 emp_phone | 9848022339
   emp_sal | 50000
  @ Row 3
 -----------+------------
    emp_id | 4
  emp_city | Pune
  emp_name | rajeev 
 emp_phone | 9848022331
   emp_sal | 30000	
 @ Row 4	
 -----------+-----------	
    emp_id | 3	
  emp_city | Chennai	
  emp_name | rahman	
 emp_phone | 9848022330
  emp_sal | 50000	
 (4 rows)
 
Тайлбар: Та өргөтгөсөн сонголтыг дараах командыг ашиглан унтрааж болно.	
 cqlsh:tutorialspoint> expand off;
 Disabled Expanded output.
	
**Гарах**
	
Энэ тушаал нь cql бүрхүүлийг зогсооход хэрэглэгддэг.
	
Нээх
 	
Энэ команд  нь Cassandra хувилбар, хост эсвэл өгөгдлийн төрлийн таамаглал зэрэг одоогийн cqlsh сессын мэдээллийг харуулна. Доор дурдсан командыг ашиглах болно.	
 cqlsh:tutorialspoint> show host;
 Connected to Test Cluster at 127.0.0.1:9042.
 cqlsh:tutorialspoint> show version;
 [cqlsh 5.0.1 | Cassandra 2.1.2 | CQL spec 3.2.0 | Native protocol v3]

Эх сурвалж
 
Энэ командыг ашиглан та командуудыг файлд гүйцэтгэж болно. Манай оролтын файл дараах байдалтай байна:

 
Дараа нь доор дурдсан шиг командуудыг агуулсан файлыг ажиллуулж болно.
 qlsh:tutorialspoint> source '/home/hadoop/CassandraProgs/inputfile';	
 emp_id |  emp_city | emp_name |  emp_phone | emp_sal	
 --------+-----------+----------+------------+---------	
      1 | Hyderabad |   ram    | 9848022338 | 50000
      2 | Delhi     |   robin  | 9848022339 | 50000
      3 | Pune      |   rajeev | 9848022331 | 30000	
      4 | Chennai   |   rahman | 9848022330 | 50000
(4 rows)

	
## Cassandra Keyspace үүсгэх
**Cqlsh ашиглан Keyspace үүсгэх**

 
Cassandra-гийн үндсэн хэсгүүдийн нэг  нь Зангилаанд өгөгдлийн хуулбарыг тодорхойлдог нэрсийн хэсэг юм. Кластер нь  keyspace-ийн зангилаа бүрийг агуулна.  CREATE KEYSPACE-ийг ашиглан keyspace үүсгэх аргыг  доор харууллаа.
 
**Синтакс:**

 CREATE KEYSPACE  WITH 

 CREATE KEYSPACE “KeySpace Name”
 WITH replication = {'class': ‘Strategy name’, 'replication_factor' : ‘No.Of   replicas’};
 CREATE KEYSPACE “KeySpace Name”
 WITH replication = {'class': ‘Strategy name’, 'replication_factor' : ‘No.Of  replicas’}
 AND durable_writes = ‘Boolean value’; 
 

**CREATE KEYSPACE** нь replication болон durable_writes  гэсэн хоёр үндсэн  шинж чанартай
 
**1.Хуулбарлалт/ replication**
 
Хуулбарлалт нь  **хуулбарлах байршилын стратеги** ба хувилахыг хүссэн тоогоор тодорхойлогддог. Доорх хүснэгтэнд бүх хуулбарлах байршилын стратегыг харууллаа
 

 

Та нэ сонголтыг ашигласнаар commitlog update (шинэчлэлт)-ийг одоогын keyspace дээр хийж өгөхийг Cassandra-д зааж өгөх боломжтой ( KeySpace дээрхи шинэчлэлтүүдэд зориулсан атрибутыг ашиглана гэж  Cassandra-д зааж өгнө)Энэ тохируулга заавал байх албагүй бөгөөд анхдагчаар үүнийг үнэн гэж зааж өгсөн байдаг. 
 
** Жишээ нь:**
 
KeySpace үүсгэх жишээг доор харууллаа
 
*  Энд бид TutorialsPoint  нэртэй KeySpace үүсгэж байна.
 
* Бидний ашиглаж буй анхны хуулбарлах стратеги нь энгийн стратеги
 
* Мөн бид replication factor  1 хуулбарыг сонгож байна 
 
 · cqlsh.> CREATE KEYSPACE tutorialspoint
 · WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 3};
 

**Баталгаа**
 
Та хүснэгт   үүссэн эсэх эсвэл **Describe** командыг ашигласан  эсэхийг   шалгах бүрэн боломжтой. Хэрэв та энэ командыг  keyspaces дээр ашиглавал доор үзүүлсэн шиг бүх үүссэн keyspaces-ийг харуулах болно.
 
 cqlsh> DESCRIBE keyspaces;
 tutorialspoint system system_traces
 
**tutorialspoint** нэртэй Keyspace үүссэн байна. 
 

**2.Durable_writes**

Хүснэгтийн durable_writes шинж чанаруудыг нь **үнэн** гэж   тохируулсан байдаг. Гэвч бид  үүнийг  худал гэж тохируулж болно. Гэхдээ  энэ шинж чанарыг **энгийн стратеги** тохируулж чадахгүй гэдгийг анхаарна уу. 
 
**Жишээ нь:**
 
Доор үзүүлсэн жишээ нь durable_writes-ийн шинж чанарыг  харуулж байна.
 
 cqlsh> CREATE KEYSPACE test
 ... WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3 }
 ... AND DURABLE_WRITES = false;
 
**Баталгаа**
 
KeySpace-ийн testing хэсэг нь  durable_writes шинж чанарыг  системийн үндсэн keyspace-д худал, эсвэл үнэн алинаар нь  зааж өгснийг шалгадаг.Энэ күэри нь танд KeySpaces-ийн бүх шинж чанаруудыг харуулна
 

   cqlsh> SELECT * FROM system.schema_keyspaces;
   keyspace_name | durable_writes |                                       strategy_class | strategy_options
            test |          False | org.apache.cassandra.locator.NetworkTopologyStrategy | {"datacenter1" : "3"}
  tutorialspoint |           True |          org.apache.cassandra.locator.SimpleStrategy | {"replication_factor" : "4"}
          system |           True |           org.apache.cassandra.locator.LocalStrategy | { }
   system_traces |           True |          org.apache.cassandra.locator.SimpleStrategy | {"replication_factor" : "2"}
 (4 rows)
 

Эндээс KeySpace тестийн durable_writes шинжийг худал гэж тохируулсан болох нь харагдаж байна.
 

**Keyspace-ийг ашиглах**
 
Та үүсгэсэн KeySpace-ыг  **USE** гэсэн түлхүүр үгийн тусламжтайгаар ашиглаж болно. Түүний синтакс нь дараах байдалтай байна: 
 
 Syntax:USE 
 
**Жишээ нь:**

Дараах жишээн дээр бид Keyspace **tutorialspoint**-ийг  ашиглалаа.
 
 cqlsh> USE tutorialspoint;
 cqlsh:tutorialspoint>
 
**Жава  API -ийг ашиглана Keyspace үүсгэх**
 
Та сэшион класс-ийн  **execute ()** аргыг ашиглан Keyspace үүсгэж болно.
Java API ашиглан keyspace үүсгэхийн тулд доорх алхмуудыг дагана уу.
 

-**Алхам 1: Кластер обектыг үүсгэх**

Эхлээд **com.datastax.driver.core** багцын **Cluster.builder** class багцыг үүсгэнэ 
 

 //Creating Cluster.Builder object
 Cluster.Builder builder1 = Cluster.builder();
 

Кластерын **addContactPoint ()** аргыг ашиглан харилцах цэг нэмнэ (зангилааны  IP хаяг). Энэ арга нь **Cluster.Builder**-ийг буцаана 
 
 //Adding contact point to the Cluster.Builder object
 Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
 
Шинэ байгуулагч  обектыг  ашиглан кластерийн объект үүсгэх. Үүнийг хийхийн тулд **cluster.builder** классд   **build()** хэмээх аргыг хэрэглэнэ. Дараах код нь кластерийн объектыг хэрхэн үүсгэхийг харуулж байна 
 
 //Building a cluster
 Cluster cluster = builder.build();
 
Кластерийн объектыг дор үзүүлсний дагуу нэг мөрөнд үүсгэж болно. 
 
 Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
 
**Алхам 2: Session объект үүсгэх**

Session объектыг доорх байдлаар кластерийн **connect()** аргыг ашиглан үүсгэж болно.
 
 Session session = cluster.connect( );
 

Энэ арга нь шинэ session  үүсгэж түүнийг эхлүүлнэ. Хэрэв та keyspace- тэй бол нэрийг нь  стринг хэлбэрээр оруулна гэдгийг доор харууллаа 
 
 Session session = cluster.connect(“ Your keyspace name ” );
 
**Алхам 3: Query хайх** 
 
Та  Session классын **execute()** аргыг ашиглан **SQL** хайлтыг  хийж  болно. 
 
Күэри нь стринг форматаар болон  тайлбар классын обектоор хоёулангаар нь  дамжиж байвал **execute()** аргыг ашиглана. Харин зөвхөн стринг форматаар дамжиж байвал хайлтыг **SQLSH** дээр хийж гүйцэтгэнэ.
 
Дараах жишээн дээр **tp** нэртэй KeySpace үүсгэж байна. Бид эхний хуулбарлалтаар   энгийн стратегийг ашиглана, өөрөөр хэлбэл  бид replication харьцаагаар 1 хуулбарыг сонгож авна.

Та хүсэлтийн хувьсагчдыг  string хэлбэрээр хадгалж доор үзүүлсэн шиг **execute()** аргаар дамжуулна.
 
 String query = "CREATE KEYSPACE tp WITH replication "
 + "= {'class':'SimpleStrategy', 'replication_factor':1}; ";
 session.execute(query);
 
**Алхам4: KeySpace ашиглах**
 
Та доор үзүүлсэнчлэн  execute () method-ийг ашиглан KeySpace- үүсгэж болно
 
 execute(“ USE tp ” );
 

Кассандра нь Java API ашиглан   keyspace-ийг үүсгэх болон ашиглах програмыг доор харууллаа
 
 import com.datastax.driver.core.Cluster;
 import com.datastax.driver.core.Session;
 public class Create_KeySpace {
 public static void main(String args[]){
       //Query
        String query = "CREATE KEYSPACE tp WITH replication "
        + "= {'class':'SimpleStrategy', 'replication_factor':1};";                   
        //creating Cluster object
       Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();    
      //Creating Session object
      Session session = cluster.connect();     
      //Executing the query
      session.execute(query);     
     //using the KeySpace
     session.execute("USE tp");
     System.out.println("Keyspace created"); 
 }
 }
 	 

Дээрх програмын нэрийг .java өргөтгөлтэй нэр өгч  хадгалаад  байгаа байршилаас нь дуудаарай. Доор үзүүлсэн шиг програмыг эмхэтгэж, ажиллуулна.
 

 $javac Create_KeySpace.java
 $java Create_KeySpace
 
Хэвийн нөхцөлд дараах үр дүн гарна
 
 Keyspace created
 
Keyspace үүссэн байна.
 

## Кассандра  Keyspace-ийг засах
**Cqlsh-ийг ашиглана Keyspace-ийг засах**

 
**KEYSPACE Alter**  нь KeySpace-ийн хуулбарлах болон durable_writes зэрэг шинж чанаруудыг  ашиглана засалт хийнэ. Энэ командын синтаксыг доор харууллаа.
 
**Синтакс:**
 
 ALTER KEYSPACE  WITH 
 ALTER KEYSPACE “KeySpace Name”
 WITH replication = {'class': ‘Strategy name’, 'replication_factor' : ‘No.Of  replicas’};

**ALTER KEYSPACE**-ийн шинж чанарууд нь CREATE KEYSPACE-ийн адилаар replication/хуулбарлах/ болон durable_writes гэсэн хоёр шинж чанартай.
 

**Durable_writes**
 

Та нэ сонголтыг ашигласнаар **commitlog update** (шинэчлэлт)-ийг одоогын keyspace дээр хийж өгөхийг Cassandra-д зааж өгнө ( KeySpace дээрхи шинэчлэлтүүдэд зориулсан атрибутыг ашиглана гэж Cassandra-д зааж өгнө)Энэ тохируулга заавал байх албагүй бөгөөд анхдагчаар үүнийг үнэн гэж зааж өгсөн байдаг
 

**Жишээ нь**
 
KeySpace-ийг өөрчлөх жишээг доор харууллаа
 

* Энд бид TutorialsPoint нэртэй KeySpace-ийг засаж  байна.
 
* Бид репликацийн харьцааг 1-ээс 3 хүртэл өөрчилж байна

 cqlsh.> ALTER KEYSPACE tutorialspoint
 WITH replication = {'class':'NetworkTopologyStrategy', 'replication_factor' : 3};
 

**Durable_writes-г өөрчлөх**
 
KeySpace-ийг  durablewrites шинж чанарыг ашиглана  засаж болно. KeySpace-ийн durablewrites шинж чанарын **туршилтыг**  доор үзүүлэв.
 
	
 SELECT * FROM system.schema_keyspaces;
  keyspace_name | durable_writes |                                      strategy_class | strategy_options
           test |          False | org.apache.cassandra.locator.NetworkTopologyStrategy | {"datacenter1":"3"}
 tutorialspoint |           True |         org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"4"}
         system |           True |           org.apache.cassandra.locator.LocalStrategy | { }
  system_traces |           True |         org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"2"}
 (4 rows)

 ALTER KEYSPACE test
 WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3}
 AND DURABLE_WRITES = true;
 
Дахин хэлэхэд KeySpaces-ийн шинж чанарыг шалгахад дараахь үр дүн гарна.
 
 SELECT * FROM system.schema_keyspaces;
  keyspace_name | durable_writes |                                      strategy_class | strategy_option
           test |           True | org.apache.cassandra.locator.NetworkTopologyStrategy | {"datacenter1":"3"}
 tutorialspoint |           True |         org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"4"}
         system |           True |          org.apache.cassandra.locator.LocalStrategy | { 
  system_traces |           True |          org.apache.cassandra.locator.SimpleStrategy | {"replication_factor":"2"}
 

**Java API ашиглан Keyspace-г өөрчлөх**

session класын  **execute ()** аргыг ашиглан keyspace-ийг өөрчилж  болно. Жава API ашиглан Keyspace- ийг өөрчлөхийн  тулд доорх алхмуудыг  дагана уу.

**Алхам 1: Кластер обектыг байгуулах**
 
Эхлээд **com.datastax.driver.core** багцын **Cluster.builder** class багцыг үүсгэнэ үү.
 

 //Creating Cluster.Builder object
 Cluster.Builder builder1 = Cluster.builder();
 
Кластерын **addContactPoint ()** аргыг ашиглан харилцах цэг нэмнэ (зангилааны IP хаяг). Энэ арга нь **Cluster.Builder**-ийг буцаана
 
 //Adding contact point to the Cluster.Builder object
 Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
 
Шинэ байгуулагч  обектыг  ашиглан кластерийн объект үүсгэх. Үүнийг хийхийн тулд cluster.builder классд   build() хэмээх аргыг хэрэглэнэ. Дараах код нь кластерийн объектыг хэрхэн үүсгэхийг харуулж байна.
 
 //Building a cluster
 Cluster cluster = builder.build();
 

Кластерийн объектыг доор үзүүлсний дагуу нэг мөрөнд үүсгэж болно.
 
 Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
 
**Алхам 2: Session Object үүсгэх**
 
Session объектыг доорх байдлаар кластерийн **connect ()** аргыг ашиглан үүсгэж болно.
 
 Session session = cluster.connect( );
 
Энэ арга нь шинэ session  үүсгэж түүнийг эхлүүлнэ. Хэрэв та keyspace- тэй бол нэрийг нь  стринг хэлбэрээр оруулна гэдгийг доор харууллаа 
 
 Session session = cluster.connect(“ Your keyspace name ” );
 
**Алхам 3: Query хайх**
 
Та  Session классын  **execute ()** аргыг ашиглан **SQL** хайлтыг  хийж  болно. 
 
Күэри нь стринг форматаар болон  тайлбар классын обектоор хоёулангаар нь  дамжиж байвал **execute()** аргыг ашиглана. Харин зөвхөн стринг форматаар дамжиж байвал хайлтыг **SQLSH** дээр хийж гүйцэтгэнэ.
 
Энэ жишээнд
 
*   Бид tp нэртэй keyspace-ийг өөрчлөх болно. Бид Энгийн Стратегийг Сүлжээний Топологийн Стратеги болгон өөрчлөх болно
 
*  Бид Durable_writes-ийг нь худал гэж өөрчилнө.
 
Күэригээ стринг хэлбэрээр хадгалж, үүнийг execute() аргаар дамжуулахыг  доор үзүүлэв.
 

 //Query
 String query = "ALTER KEYSPACE tp WITH replication " + "=  {'class':'NetworkTopologyStrategy', 'datacenter1':3}" +" AND DURABLE_WRITES = 
 false;";
 session.execute(query);
 
Java API ашиглан Cassandra дахь keycpace-ийг үүсгэх  болон ашиглах програмыг доор харууллаа.
 
 import com.datastax.driver.core.Cluster;
 import com.datastax.driver.core.Session;
 public class Alter_KeySpace {
 public static void main(String args[]){
      //Query
      String query = "ALTER KEYSPACE tp WITH replication " + "= {'class':'NetworkTopologyStrategy', 'datacenter1':3}"
      + "AND DURABLE_WRITES = false;";
     //Creating Cluster object
      Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();   
     //Creating Session object
      Session session = cluster.connect(); 
     //Executing the query
     session.execute(query); 
     System.out.println("Keyspace altered");
  }
 }
 
Дээрх програмыг .java өргөтгөлтэй  нэрээр  хадгалаад дараа нь хадгалагдсан байрлалаас нь дуудна уу. Доор үзүүлсэн шиг хөрвүлэх програмыг ажиллуулна.
 
 $javac Alter_KeySpace.java
 $java Alter_KeySpace
 
Хэвийн нөхцөлд дээрх үр дүн гарна                             
 	
## Кассандра- Keyspace-ийг устгах
**Cqlsh ашиглан Keyspace-ийг устгах**

Та **DROP KEYSPACE** командыг ашиглан KeySpace-г устгаж болно. KeySpace-г устгах синтаксыг доор харууллаа.
 
**Syntax**

 DROP KEYSPACE 

i.e.
 
 DROP KEYSPACE “KeySpace name”
 

**Жишээ**
 

**Tutorialpoint** keyspace-ийг устгах кодыг үзүүллээ.
 
 cqlsh> DROP KEYSPACE tutorialspoint;
 

**Баталгаа**
 
Keyspace-г засах мөн  **Describe**  команыг ашиглана хүснэгт устсан эсэхийг   шалгаж  байгааг харуулж байна.
 
 cqlsh> DESCRIBE keyspaces;
 system system_traces
 

Бид keyspace tutorialspoint-ийг устгасны дараа  keyspace жагсаалтыг олж болохгүй.
 

**Java API ашиглан Keyspace-г устгах**
 
Та сэшион класс-ийн  execute () аргыг ашиглан Keyspac-г устгаж  болно.
Java API ашиглан keyspace устгахын  тулд доорх алхмуудыг дагана уу.
 
**Алхам1: Кластер обектыг  үүсгэх**
 
Эхлээд **com.datastax.driver.core** багцын **Cluster.builder** class багцыг үүсгэнэ 
 //Creating Cluster.Builder object
  
 Cluster.Builder builder1 = Cluster.builder();
 

'*Алхам 2*: Session объект үүсгэх**
 
Session объектыг доорх байдлаар кластерийн **connect ()** аргыг ашиглан үүсгэж болно.
 
 Session session = cluster.connect( );
 
Энэ арга нь шинэ **session**  үүсгэж түүнийг эхлүүлнэ. Хэрэв та keyspace- тэй бол нэрийг нь  стринг хэлбэрээр оруулна гэдгийг доор харууллаа 
 
 Session session = cluster.connect(“ Your keyspace name ” );
 
**Алхам 3*: Query хайх**
 
Та  Session классын execute () аргыг ашиглан **SQL** хайлтыг  хийж  болно. 
 
Квэри нь стринг форматаар болон  тайлбар классын обектоор хоёулангаар нь  дамжиж байвал **execute()** аргыг ашиглана. Харин зөвхөн стринг форматаар дамжиж байвал хайлтыг **SQLSH** дээр хийж гүйцэтгэнэ.
 

Энэ жишээн дээр **tp** нэртэй KeySpace-г устгаж байна. 
 
Та хүсэлтийн хувьсагчдыг  **string** хэлбэрээр хадгалж доор үзүүлсэн шиг execute() аргаар дамжуулна.
 

 String query = "DROP KEYSPACE tp; ";
 session.execute(query);
 
Кассандра нь **Java API*' ашиглан   keyspace-ийг устгах  програмыг доор харууллаа
 
 import com.datastax.driver.core.Cluster;
 import com.datastax.driver.core.Session;
 public class Drop_KeySpace {
 public static void main(String args[]){
     //Query
      String query = "Drop KEYSPACE tp";
 //creating Cluster object
 Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();    
 //Creating Session object
 Session session = cluster.connect();    
  //Executing the query
 session.execute(query);
 System.out.println("Keyspace deleted");
 }
 }
  
Дээрх програмын нэрийг .java өргөтгөлтэй нэр өгч  хадгалаад  байгаа байршилаас нь дуудаарай. Доор үзүүлсэн шиг програмыг эмхэтгэж, ажиллуулна.
 
 $javac Delete_KeySpace.java
 $java Delete_KeySpace
 
Хэвийн нөхцөлд дээрх үр дүн гарна.
 

−		 
−	
                                                     ==Хүснэгт үүсгэ==
−	
Cqlsh ашиглан хүснэгт үүсгэх
 
−		 
−	
Та CREATE TABLE командыг ашиглан хүснэгт үүсгэж болно. Доорх хүснэгтийг үүсгэх синтакс бол
 
−		 
−	

 
−		 
−	
CREATE (TABLE | COLUMNFAMILY) 
 
−		 
−	
('' , '')
 
−		 
−	
(WITH  AND )
 
−		 
−	
Багана тодорхойлох
 
−		 
−	
Та доор үзүүлсэн шиг баганыг тодорхойлж болно.
 
−		 
−	
column name1 data type,
 
−		 
−	
column name2 data type,
 
−		 
−	
example:
 
−		 
−	
age int,
 
−		 
−	
name text
 
−		 
−	
Хүүхдийн түлхүүр
 
−		 
−	
Анхдагч түлхүүр нь мөрийг танихад хэрэглэгддэг багана юм. Тиймээс хүснэгт үүсгэхдээ гол санааг тодорхойлох нь заавал байх ёстой. Анхны түлхүүр нь нэг буюу хэд хэдэн баганын баганаар хийгддэг. Та дор үзүүлсэн шиг хүснэгтийн үндсэн түлхүүрийг тодорхойлж болно.
 
−		 
−	
CREATE TABLE tablename(
 
−		 
−	
   column1 name datatype PRIMARYKEY,
 
−		 
−	
   column2 name data type,
 
−		 
−	
   column3 name data type.
 
−		 
−	
   )
 
−		 
−	
эсвэл
 
−		 
−	
CREATE TABLE tablename(
 
−		 
−	
   column1 name datatype PRIMARYKEY,
 
−		 
−	
   column2 name data type,
 
−		 
−	
   column3 name data type,
 
−		 
−	
   PRIMARY KEY (column1)
 
−		 
−	
   )
 
−		 
−	
Жишээ нь:
 
−		 
−	
Доорхи жишээнээс харахад cqlsh ашиглан Cassandra дахь хүснэгт үүсгэх жишээ юм. Бид энд байна:
 
−		 
−	
.Зааварчилгааны түлхүүр үг ашиглах
 
−		 
−	
.Цонх гэж нэрлэгдсэн хүснэгт үүсгэх
 
−		 
−	
Энэ нь ажилтны нэр, дугаар, хот, цалин, утасны дугаар гэх мэт дэлгэрэнгүй мэдээллийг агуулсан болно. Ажилчдын ID бол үндсэн түлхүүр юм.
 
−		 
−	
cqlsh> USE tutorialspoint;
 
−		 
−	
cqlsh:tutorialspoint>; CREATE TABLE emp(
 
−		 
−	
   emp_id int PRIMARY KEY,
 
−		 
−	
   emp_name text,
 
−		 
−	
   emp_city text,
 
−		 
−	
   emp_sal varint,
 
−		 
−	
   emp_phone varint
 
−		 
−	
   );
 
−		 
−	
Баталгаажуулалт
 
−		 
−	
Сонгогдсон мэдэгдэл танд схемийг өгөх болно. Доор харуулсан шиг сонгогдсон мэдэгдлийг ашиглан хүснэгтийг шалгана уу.
 
−		 
−	
cqlsh:tutorialspoint> select * from emp;
 
−		 
−	
 emp_id | emp_city | emp_name | emp_phone | emp_sal
 
−		 
−	
+----------+----------+-----------+---------
 
−		 
−	
(0 rows)
 
−		 
−	
Орчуулах
 
−		 
−	
Here you can observe the table created with the given columns. Since we have deleted the keyspace tutorialspoint, you will not find it in the keyspaces list.
 
−		 
−	
Creating a Table using Java API
 
−		 
−	
You can create a table using the execute() method of Session class. Follow the steps given below to create a table using Java API.
 
−		 
−	
Энд байгаа багануудтай үүсгэсэн хүснэгтийг ажиглаж болно. Бид зааж өгсөн түлхүүр үгнүүдийг устгасан тул та түлхүүрүүдийг жагсаалтад оруулахгүй.
 
−		 
−	
Java API ашиглан Хүснэгт үүсгэх
 
−		 
−	
Та хичээл ангийн execute () аргыг ашиглан хүснэгт үүсгэж болно. Java API ашиглан хүснэгт үүсгэхийн тулд доорх алхмуудыг дагана уу.
 
−		 
−	
Алхам1: Бүлгийн бүлгийг үүсгэх
 
−		 
−	
Юуны өмнө, доор үзүүлсэн шиг com.datastax.driver.core багцын Cluster.builder class багцыг үүсгэ.
 
−		 
−	
//Creating Cluster.Builder object
 
−		 
−	
Cluster.Builder builder1 = Cluster.builder();
 
−		 
−	
Кластерын addContactPoint () аргыг ашиглан холбоо барих цэг (цэгийн IP хаяг) нэмнэ. Энэ арга нь Cluster.Builder-ийг буцаана.
 
−		 
−	
//Adding contact point to the Cluster.Builder object
 
−		 
−	
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
 
−		 
−	
Шинэ бүтээх объектыг ашиглан кластерийн объект үүсгэнэ. Үүнийг хийхийн тулд кластерт бий болгох бүтээлд () бий. Дараах код нь кластерийн объектыг хэрхэн үүсгэхийг харуулж байна.
 
−		 
−	
//Building a cluster
 
−		 
−	
Cluster cluster = builder.build();
 
−		 
−	
Кластерийн объектыг дор үзүүлсний дагуу нэг мөр кодыг ашиглан үүсгэж болно.
 
−		 
−	
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
 
−		 
−	
Алхам 2: Session Object үүсгэнэ үү
 
−		 
−	
Бүлгийн объектыг доор үзүүлсэн шиг кластерийн холболтын () аргыг ашиглан үүсгэнэ.
 
−		 
−	
Session session = cluster.connect( );
 
−		 
−	
Энэ арга нь шинэ сесс үүсгэж түүнийг эхлүүлнэ. Хэрвээ та аль хэдийнээ зайтай байгаа бол, үүнийг доорх байдлаар харуулсан форматыг ашиглана.
 
−		 
−	
Session session = cluster.connect(“ Your keyspace name ” );
 
−		 
−	
Энд бид tp нэртэй түлхүүр зай ашигладаг. Тиймээс доор үзүүлсэн шиг сесс объектыг үүсгэ.
 
−		 
−	
Session session = cluster.connect(“ tp” );
 
−		 
−	
Алхам 3: Query хайх
 
−		 
−	
Та CQL хайлтыг Session классын execute () аргыг ашиглан гүйцэтгэж болно. Хайлтын мөрийг форматаар эсвэл Тайлбар ангийн объектыг гүйцэтгэх () аргыг ашиглаж болно. Хэрвээ та энэ арганд энэ аргыг ашигласан бол cqlsh дээр ажиллуулна.
 
−		 
−	
Дараах жишээнд бид нэртэй хүснэгт үүсгэж байна. Та хүсэлтийг string хувьсагчид хадгалж доор үзүүлсэн шиг гүйцэтгэх () аргаар үүнийг дамжуулна.
 
−		 
−	
//Query
 
−		 
−	
String query = "CREATE TABLE emp(emp_id int PRIMARY KEY, "
 
−		 
−	
   + "emp_name text, "
 
−		 
−	
   + "emp_city text, "
 
−		 
−	
   + "emp_sal varint, "
 
−		 
−	
   + "emp_phone varint );";
 
−		 
−	
session.execute(query);
 
−		 
−	
Доорх нь Java API ашиглан Cassandra дахь түлхүүр талбарыг үүсгэх, ашиглах бүрэн програм юм.
 
−		 
−	
import com.datastax.driver.core.Cluster;
 
−		 
−	
import com.datastax.driver.core.Session;
 
−		 
−	
public class Create_Table {
 
−		 
−	
   public static void main(String args[]){
 
−		 
−	
      //Query
 
−		 
−	
      String query = "CREATE TABLE emp(emp_id int PRIMARY KEY, "
 
−		 
−	
         + "emp_name text, "
 
−		 
−	
         + "emp_city text, "
 
−		 
−	
         + "emp_sal varint, "
 
−		 
−	
         + "emp_phone varint );";                                
 
−		 
−	
      //Creating Cluster object
 
−		 
−	
      Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();   
 
−		 
−	
      //Creating Session object
 
−		 
−	
      Session session = cluster.connect("tp"); 
 
−		 
−	
      //Executing the query
 
−		 
−	
     session.execute(query); 
 
−		 
−	
     System.out.println("Table created");
 
−		 
−	
   }
 
−		 
−	
}
 
−		 
−	
Дээрх програмыг клиентийн нэрээр хадгалаад дараа нь .java хадгалж байгаа байршлаасаа хайгаарай. Доор үзүүлсэн шиг програмыг эмхэтгэж, ажиллуулна.
 
−		 
−	
$javac Create_Table.java
 
−		 
−	
$java Create_Table
 
−		 
−	
Хэвийн нөхцөлд дараах үр дүн гарна:
 
−		 
−	
Table created
 
−		 
−	
                                                     == Кассандра-Өөрчлөлт Хүснэгт ==
 
−	
Cqlsh ашиглан хүснэгтийг өөрчлөх нь
 
−		 
−	
Та ALTER TABLE командыг ашиглан хүснэгтийг өөрчилж болно. Доорх хүснэгтийг үүсгэх синтакс бол
 
−		 
−	
Syntax
 
−		 
−	
ALTER (TABLE | COLUMNFAMILY)  
 
−		 
−	
ALTER командыг ашиглан та дараах үйлдлүүдийг хийж болно:
 
−		 
−	
Багана нэмэх
 
−		 
−	
Багана хая
 
−		 
−	
Багана нэмэх
 
−		 
−	
ALTER командыг ашиглан та баганыг хүснэгтэд нэмэх боломжтой. Багана нэмэх үед баганын нэр нь одоо байгаа баганын нэртэй зөрчилдөхгүй бөгөөд хүснэгтийг компакт хадгалалтын сонголтоор тодорхойлоогүй гэдгийг анхаарах хэрэгтэй. Доорхи хүснэгтэд баганыг нэмэх синтакс байна.
 
−		 
−	
ALTER TABLE table name
 
−		 
−	
ADD  new column datatype;
 
−		 
−	
Жишээ нь
 
−		 
−	
Доорхи жишээнд үзүүлсэн багананд багана нэмэх жишээ байна. Энд бид текст өгөгдлийн emp_email нэртэй багана-д emp гэж нэрлэгдсэн хүснэгтэд нэмэх болно.
 
−		 
−	
cqlsh:tutorialspoint> ALTER TABLE emp
 
−		 
−	
   ... ADD emp_email text;
 
−		 
−	
Баталгаажуулалт
 
−		 
−	
Багана нэмэгдсэн эсэхийг магадлахын тулд SELECT мэдэгдлийг ашиглана уу. Энд шинээр нэмсэн баганад emp_email ажиглаж болно.
 
−		 
−	
cqlsh:tutorialspoint> select * from emp;
 
−		 
−	
 emp_id | emp_city | emp_email | emp_name | emp_phone | emp_sal
 
−		 
−	
+----------+-----------+----------+-----------+---------
 
−		 
−	
Emp_email багана устгагдсан болохоор та үүнийг дахиж олохгүй.
 
−		 
−	
Java API ашиглан Хүснэгтийг өөрчлөх нь
 
−		 
−	
Та хичээл ангийн execute () аргыг ашиглан хүснэгт үүсгэж болно. Java API ашиглан хүснэгтийг өөрчлөхийн тулд доорх алхмуудыг дагана уу.
 
−		 
−	
Алхам1: Бүлгийн бүлгийг үүсгэх
 
−		 
−	
Юуны өмнө, доор үзүүлсэн шиг com.datastax.driver.core багцын Cluster.builder class-ийн жишээг үүсгэ.
 
−		 
−	
//Creating Cluster.Builder object
 
−		 
−	
Cluster.Builder builder1 = Cluster.builder();
 
−		 
−	
Кластерын addContactPoint () аргыг ашиглан холбоо барих цэг (цэгийн IP хаяг) нэмнэ. Энэ арга нь Cluster.Builder-ийг буцаана.
 
−		 
−	
//Adding contact point to the Cluster.Builder object
 
−		 
−	
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
 
−		 
−	
Шинэ бүтээх объектыг ашиглан кластерийн объект үүсгэнэ. Үүнийг хийхийн тулд кластерт бий болгох бүтээлд () бий. Дараах код нь кластерийн объектыг хэрхэн үүсгэхийг харуулж байна.
 
−		 
−	
//Building a cluster
 
−		 
−	
Cluster cluster = builder.build();
 
−		 
−	
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
 
−		 
−	
Алхам 2: Session Object үүсгэнэ үү
 
−		 
−	
Бүлгийн объектыг доор үзүүлсэн шиг кластерийн холболтын () аргыг ашиглан үүсгэнэ.
 
−		 
−	
Session session = cluster.connect( );
 
−		 
−	
Энэ арга нь шинэ сесс үүсгэж түүнийг эхлүүлнэ. Хэрэв та аль хэдийн түлхүүр зайтай бол, үүнийг доорх байдлаар харуулсан форматаар KeySpace нэрийг string хэлбэрээр дамжуулж өгч болно.
 
−		 
−	
ession session = cluster.connect(“ Your keyspace name ” );
 
−		 
−	
Session session = cluster.connect(“ tp” );
 
−		 
−	
Энд бид tp нэртэй KeySpace ашиглаж байна. Тиймээс доор үзүүлсэн шиг сесс объектыг үүсгэ.
 
−		 
−	
Алхам 3: Query хайх
 
−		 
−	
Та CQL хайлтыг Session классын execute () аргыг ашиглан гүйцэтгэж болно. Хайлтын мөрийг форматаар эсвэл Тайлбар ангийн объектыг гүйцэтгэх () аргыг ашиглаж болно. Хэрвээ та энэ арганд энэ аргыг ашигласан бол cqlsh дээр ажиллуулна.
 
−		 
−	
Дараах жишээнд бид баганыг хоосон хүснэгтэнд нэмнэ. Үүнийг хийхийн тулд та асуулгыг хувьсагчийн мөрөнд хадгалж доор үзүүлсэн шиг гүйцэтгэх () аргаар үүнийг дамжуулна.
 
−		 
−	
//Query
 
−		 
−	
String query1 = "ALTER TABLE emp ADD emp_email text";
 
−		 
−	
session.execute(query);
 
−		 
−	
Доорхи хүснэгтэд баганыг нэмэх бүрэн програм юм.
 
−		 
−	
import com.datastax.driver.core.Cluster;
 
−		 
−	
import com.datastax.driver.core.Session;
 
−		 
−	
public class Add_column {
 
−		 
−	
   public static void main(String args[]){
 
−		 
−	
      //Query
 
−		 
−	
      String query = "ALTER TABLE emp ADD emp_email text";
 
−		 
−	
      //Creating Cluster object
 
−		 
−	
      Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();     
 
−		 
−	
      //Creating Session object
 
−		 
−	
      Session session = cluster.connect("tp");    
 
−		 
−	
      //Executing the query
 
−		 
−	
     session.execute(query);  
 
−		 
−	
     System.out.println("Column added");
 
−		 
−	
   }
 
−		 
−	
}
 
−		 
−	
Дээрх програмыг клиентийн нэрээр хадгалаад дараа нь .java хадгалж байгаа байршлаасаа хайгаарай. Доор үзүүлсэн шиг програмыг эмхэтгэж, ажиллуулна.
 
−		 
−	
$javac Add_Column.java
 
−		 
−	
$java Add_Column
 
−		 
−	
Хэвийн нөхцөлд дараах үр дүн гарна:
 
−		 
−	
Column added
 
−		 
−	
Багана устгах
 
−		 
−	
Доорхи хүснэгтэд байгаа баганыг устгах бүрэн програмыг хэлнэ.
 
−		 
−	
import com.datastax.driver.core.Cluster;
 
−		 
−	
import com.datastax.driver.core.Session;
 
−		 
−	
public class Delete_Column {
 
−		 
−	
   public static void main(String args[]){
 
−		 
−	
      //Query
 
−		 
−	
      String query = "ALTER TABLE emp DROP emp_email;";
 
−		 
−	
      //Creating Cluster object
 
−		 
−	
      Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build(); 
 
−		 
−	
      //Creating Session object
 
−		 
−	
      Session session = cluster.connect("tp"); 
 
−		 
−	
      //executing the query
 
−		 
−	
     session.execute(query);    
 
−		 
−	
     System.out.println("Column deleted");
 
−		 
−	
   }
 
−		 
−	
 }
 
−		 
−	
Дээрх програмыг клиентийн нэрээр хадгалаад дараа нь .java хадгалж байгаа байршлаасаа хайгаарай. Доор үзүүлсэн шиг програмыг эмхэтгэж, ажиллуулна.
 
−		 
−	
$javac Delete_Column.java
 
−		 
−	
$java Delete_Column
 
−		 
−	
Хэвийн нөхцөлд дараах үр дүн гарна:
 
−		 
−	
Column deleted
 
−		 
−	
                                                            == Кассандра-Устгах хүснэгт ==
 
−	
Cqlsh ашиглан хүснэгтийг буулгана
 
−		 
−	
Та дугаарын хүснэгтийг ашиглан хүснэгтийг унагаж болно. Түүний синтакс нь дараах байдалтай байна:
 
−		 
−	
Syntax
 
−		 
−	
DROP TABLE 
 
−		 
−	
Жишээ нь
 
−		 
−	
Дараах код нь одоо байгаа хүснэгтийг KeySpace-с оруулдаг.
 
−		 
−	
cqlsh:tutorialspoint> DROP TABLE emp;
 
−		 
−	
Баталгаажуулалт
 
−		 
−	
Бичгийн командыг ашиглан хүснэгт устгагдсан эсэхийг шалгана уу. Эм хүснэгтийг устгасан тул багануудын гэр бүлийн жагсаалтад үүнийг олохгүй.
 
−		 
−	
cqlsh:tutorialspoint> DESCRIBE COLUMNFAMILIES;
 
−		 
−	
employee
 
−		 
−	
Java API ашиглан Хүснэгтийг устгах нь
 
−		 
−	
Та хичээл ангийн execute () аргыг ашиглан хүснэгтийг устгаж болно. Java API ашиглан хүснэгтийг устгахын тулд доорх алхмуудыг дагана уу.
 
−		 
−	
Алхам1: Бүлгийн бүлгийг үүсгэх
 
−		 
−	
Юуны өмнө com.datastax.driver.core багцын Cluster.builder class багцыг доор үзүүлэв:
 
−		 
−	
//Creating Cluster.Builder object
 
−		 
−	
Cluster.Builder builder1 = Cluster.builder();
 
−		 
−	
Кластерын addContactPoint () аргыг ашиглан холбоо барих цэг (цэгийн IP хаяг) нэмнэ. Энэ арга нь Cluster.Builder-ийг буцаана.
 
−		 
−	
//Adding contact point to the Cluster.Builder object
 
−		 
−	
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );
 
−		 
−	
Using the new builder object, create a cluster object. To do so, you have a method called build() in the Cluster.Builder class. The following code shows how to create a cluster object.
 
−		 
−	
//Building a cluster
 
−		 
−	
Cluster cluster = builder.build();
 
−		 
−	
Кластерийн объектыг дор үзүүлсний дагуу нэг мөр кодыг ашиглан үүсгэж болно.
 
−		 
−	
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
 
−		 
−	
Алхам 2: Session Object үүсгэнэ үү
 
−		 
−	
Бүлгийн объектыг доор үзүүлсэн шиг кластерийн холболтын () аргыг ашиглан үүсгэнэ.
 
−		 
−	
Session session = cluster.connect( );
 
−		 
−	
Энэ арга нь шинэ сесс үүсгэж түүнийг эхлүүлнэ. Хэрэв та аль хэдийн түлхүүр зайтай бол, үүнийг доорх байдлаар харуулсан форматаар KeySpace нэрийг string хэлбэрээр дамжуулж өгч болно.
 
−		 
−	
Session session = cluster.connect(“Your keyspace name”);
 
−		 
−	
Энд бид tp нэртэй түлхүүр зай ашигладаг. Тиймээс доор үзүүлсэн шиг сесс объектыг үүсгэ.
 
−		 
−	
Session session = cluster.connect(“tp”);
 
−		 
−	
Алхам 3: Query хайх
 
−		 
−	
Та CQL асуулгуудыг execute () Session class аргыг ашиглан гүйцэтгэж болно. Хайлтын мөрийг форматаар эсвэл Тайлбар ангийн объектыг гүйцэтгэх () аргыг ашиглаж болно. Хэрвээ та энэ арганд энэ аргыг ашигласан бол cqlsh дээр ажиллуулна.
 
−		 
−	
Дараах жишээнд бид нэртэй хүснэгтийг устгаж байна. Та хүсэлтийг string хувьсагчид хадгалж доор үзүүлсэн шиг гүйцэтгэх () аргаар үүнийг дамжуулна.
 
−		 
−	
// Query
 
−		 
−	
String query = "DROP TABLE emp1;”;
 
−		 
−	
session.execute(query);
 
−		 
−	
Доорх нь Java API ашиглан Кассандра дахь хүснэгтийг унагаах бүрэн програм юм.
 
−		 
−	
import com.datastax.driver.core.Cluster;
 
−		 
−	
import com.datastax.driver.core.Session; 
 
−		 
−	
public class Drop_Table {
 
−		 
−	
   public static void main(String args[]){
 
−		 
−	
      //Query
 
−		 
−	
      String query = "DROP TABLE emp1;";
 
−		 
−	
      Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();    
 
−		 
−	
      //Creating Session object
 
−		 
−	
      Session session = cluster.connect("tp");   
 
−		 
−	
      //Executing the query
 
−		 
−	
     session.execute(query);    
 
−		 
−	
     System.out.println("Table dropped");
 
−		 
−	
   }
 
−		 
−	
}
 
−		 
−	
Дээрх програмыг клиентийн нэрээр хадгалаад дараа нь .java хадгалж байгаа байршлаасаа хайгаарай. Доор үзүүлсэн шиг програмыг эмхэтгэж, ажиллуулна.
 
−		 
−	
$javac Drop_Table.java
 
−		 
−	
$java Drop_Table
 
−		 
−	
Хэвийн нөхцөлд дараахь үр дүн гарна:
 
−		 
−	
Table dropped
 
−	
## Кассандра CQL Төрөл
**Кассандра- CQL Өгөгдөл**
 

CQL нь цуглуулгын төрлүүд гэх мэт төрөл бүрийн өгөгдлийн төрөл агуулсан байдаг. Эдгээр өгөгдлийн төрлүүдтэй зэрэгцэн хэрэглэгчид өөрсдийн тусгай өгөгдлийн төрөл үүсгэж болно. Дараах хүснэгтэд CQL-д байгаа төрөл бүрийн өгөгдлийн төрлийн жагсаалтыг харуулав
 

		 

**Цуглуулгын төрөл**
 

Cassandra Query Language нь цуглуулгын өгөгдлийн төрлийг агуулдаг. Дараах хүснэгтэд CQL дэх цуглуулгуудын жагсаалтыг харуулав.
 

Хэрэглэгчийн тодорхойлсон өгөгдлийн төрөл:
 
Cqlsh нь хэрэглэгчид өөрийн өгөгдлийн төрлийг бий болгох боломжийг олгодог. Хэрэглэгчийн тодорхойлсон өгөгдлийн төрлүүдийг ашиглахад хэрэглэгддэг тушаалуудыг доор өгөв

•	**CREATE TYPE** - Хэрэглэгчийн тодорхойлсон өгөгдлийн сан үүсгэнэ

•	**ALTER TYPE** - Хэрэглэгчийн тодорхойлсон өгөгдлийн төрлийг өөрчлөх.

•	**DROP TYPE** - Хэрэглэгчийн тодорхойлсон өгөгдлийн төрлийг бууруулдаг.

•	**DESCRIBE TYPE** - Хэрэглэгчийн тодорхойлсон өгөгдлийн төpлийг тодорхойлно.

•	**DESCRIBE TYPES** - Хэрэглэгчийн тодорхойлсон өгөгдлийн төрлийг тодорхойлно.

## Кассандра-CQL цуглуулгууд
CQL цуглуулга өгөгдлийн төрлийг ашиглах боломжийг олгодог. Эдгээр цуглуулгаийг ашиглахдаа олон утгыг нэг хувьсагчид хадгалж болно. Энэ бүлэгт Cassandra дахь цуглуулгуудыг хэрхэн ашиглах талаар тайлбарлана
 
**Жагсаалт**
 

Энд байгаа жагсаалтад жагсаалтыг ашигладаг
 
* элементийн дарааллыг хадгалах,
* утга нь олон удаа хадгалагдах болно

 
Жагсаалтын өгөгдлийн төрлүүдийн утгыг жагсаалт дахь элементүүдийн индекс ашиглан авч болно.
 
**Жагсаалттай хүснэгтийг үүсгэх**
 
Доорх жишээнээс жишээ авъя гэвэл хоёр багана, нэр, и-мэйлээр жишээ авъя. Олон и-мэйл хадгалахын тулд бид жагсаалтыг ашиглаж байна
 

 cqlsh:tutorialspoint> CREATE TABLE data(name text PRIMARY KEY, email list);
 

**Жагсаалтад өгөгдөл оруулах**
 

Жагсаалт дахь элементүүдэд өгөгдөл оруулахдаа квадрат хаалтанд [] доор харуулагдсан бүх утгыг оруул.
 
 cqlsh:tutorialspoint> INSERT INTO data(name, email) VALUES ('ramu',	
 ['abc@gmail.com','cba@yahoo.com'])
 
	
**Жагсаалтыг шинэчилж байна**
 
Доорх өгөгдөл нь өгөгдөл гэж нэрлэгдсэн хүснэгтийн жагсаалтан дахь өгөгдлийн төрөлийг шинэчлэх жишээ юм. Энд бид жагсаалтад өөр нэг имэйл нэмж байна.
 
 cqlsh:tutorialspoint> UPDATE data	
 ... SET email = email +['xyz@tutorialspoint.com']
 ... where name = 'ramu';
 

**Баталгаажуулалт**
 
Хэрэв та хүснэгтийг SELECT statement ашиглан шалгаж байвал дараах үр дүнг авна.	
 
 cqlsh:tutorialspoint> SELECT * FROM data;
 name | email
 −	
 ------+--------------------------------------------------------------
 −	
 ramu | ['abc@gmail.com', 'cba@yahoo.com', 'xyz@tutorialspoint.com'
 −	
 (1 rows)

**Тохируулах **
 
Тодорхойлолт нь бүлэг элементүүдийг хадгалахад ашиглагддаг өгөгдлийн төрөл юм. Багцын элементүүдийг ялгах дарааллаар буцаана.
 
**Тохируулгатай хүснэгтийг үүсгэх**
 
Дараах жишээнд дээжийн хүснэгтийг хоёр багана, нэр, утасны дугаараар үүсгэдэг. Олон тооны утасны дугаарыг хадгалахын тулд бид багцыг ашиглаж байна		
 
 cqlsh:tutorialspoint> CREATE TABLE data2 (name text PRIMARY KEY, phone set);
 

**Өгөгдөл оруулах нь**
 
Өгөгдлийг элементүүдэд оруулах үед, доор үзүүлсэн шиг буржгар хаалт {} доор тусгаарлагдсан утгуудыг оруул.
 
 cqlsh:tutorialspoint> INSERT INTO data2(name, phone)VALUES ('rahman',    {9848022338,9848022339});
 

**Тодорхойлолтыг шинэчлэх**
 

Дараах код нь өгөгдлийг нэрлэх хүснэгтэд хэрхэн шинэчлэхийг харуулж байна. Энд бид багцын өөр утасны дугаар нэмж байна.
 

 cqlsh:tutorialspoint> UPDATE data2
 
 ... SET phone = phone + {9848022330}
 ... where name = 'rahman';
 
**Баталгаажуулалт**
 
Хэрэв та хүснэгтийг SELECT statement ашиглан шалгаж байвал дараах үр дүнг авна.
 
 cqlsh:tutorialspoint> SELECT * FROM data2;
 name | phone
 --------+--------------------------------------
 −	
 rahman | {9848022330, 9848022338, 9848022339}
 −	
 (1 rows)
 

**ЗУРАГ**
 
Газрын зураг нь түлхүүрийн үнэ цэнэтэй хоёр элементийг хадгалахад ашиглагддаг өгөгдлийн төрөл юм.
 
**Газрын зурагтай Хүснэгтийг үүсгэх**
 
Дараах жишээ нь хоёр багана, нэр, хаягыг хэрхэн түүвэрлэлтийн хүснэгтийг хэрхэн үүсгэхийг харуулж байна. Олон хаягийн утгыг хадгалахын тулд бид газрын зургийг ашиглаж байна.
 
 cqlsh:tutorialspoint> CREATE TABLE data3 (name text PRIMARY KEY, address
 map);
 
**Газрын зураг руу өгөгдөл оруулах**

Газрын зураг дээрх элементүүдэд өгөгдөл оруулахдаа бүх түлхүүрийг оруул. Доор харуулснаар {} баруун тийш таслалаар таслагдсан хос утга бүхий утга.
 
 cqlsh:tutorialspoint> INSERT INTO data3 (name, address)
 VALUES ('robin', {'home' : 'hyderabad' , 'office' : 'Delhi' } );

**Тодорхойлолтыг шинэчлэх**
 
Дараах код нь өгөгдлийн өгөгдлийн төрлийг хэрхэн шинэчлэхийг харуулж байна3. Энд бид гол оффисын үнэ цэнийг өөрчилж байна, өөрөөр хэлбэл, бид робин нэртэй хүний оффисийн хаягийг өөрчилж байна.
 
 cqlsh:tutorialspoint> UPDATE data3
 ... SET address = address+{'office':'mumbai'}	
 ... WHERE name = 'robin';
 
**Баталгаажуулалт**
 
Хэрэв та хүснэгтийг SELECT statement ашиглан шалгаж байвал дараах үр дүнг авна.
 
 cqlsh:tutorialspoint> select * from data3;
 name | address
 -
 -------+-------------------------------------------
 −	
 robin | {'home': 'hyderabad', 'office': 'mumbai'}
 (1 rows)
 
## Кассандра - CQL Хэрэглэгчийн тодорхойлж өгсөн өгөгдөл
CQL нь хэрэглэгчийн тодорхойлсон өгөгдлийн төрлийг үүсгэх, ашиглах боломжийг хангадаг. Та олон талбарт ажиллах өгөгдлийн төрөл үүсгэж болно. Энэ бүлэгт хэрэглэгчийн тодорхойлсон өгөгдлийн төрлийг хэрхэн үүсгэх, өөрчлөх, устгах талаар тайлбарлана.
 
**Хэрэглэгчийн тодорхойлсон өгөгдлийн төрлийг үүсгэх**
 
CREATE TYPE тушаал нь хэрэглэгчийн тодорхойлсон өгөгдлийн төрлийг үүсгэхэд ашиглагддаг. Түүний синтакс нь дараах байдалтай байна:
 
 CREATE TYPE . 
 ( variable1, variable2).
 
Жишээ нь
 
Доорх бол хэрэглэгчийн тодорхойлсон өгөгдлийн төрлийг үүсгэх жишээ юм. Энэ жишээнд бид дараах дэлгэрэнгүй мэдээллийг агуулсан картан дээрхи мэдээллийн төрөл үүсгэж байна.
 

 cqlsh:tutorialspoint> CREATE TYPE card_details (
 ... num int,
 ... pin int,
 ... name text,
 ... cvv int,
 ... phone set
 ... );
 

**Тэмдэглэл**: Хэрэглэгчийн тодорхойлсон өгөгдлийн төрөлд ашиглагдах нэр нь хадгалагдсан төрлийн нэртэй таарахгүй байх ёстой.
 

**Баталгаажуулалт**
 
DESCRIBE тушаалыг ашиглан үүсгэсэн төрлийг үүсгэсэн эсэхийг шалгана уу.
 
 CREATE TYPE tutorialspoint.card_details (
 num int,	
 pin int,
 name text, 
 cvv int,
 phone set
 );
 

**Хэрэглэгчийн тодорхойлсон өгөгдлийн төрлийг өөрчлөх**
 
**ALTER TYPE** командыг одоо байгаа өгөгдлийн төрлийг өөрчлөхөд ашигладаг. ALTER-г ашигласнаар та шинэ талбарыг нэмж эсвэл одоо байгаа талбарыг өөрчилж болно.
 

**Талбарт төрөл нэмэх**
 
Хэрэглэгчийн тодорхойлсон өгөгдлийн төрөлд шинэ талбарыг нэмэхийн тулд дараах синтаксийг ашиглана.
 
 ALTER TYPE typename
 ADD field_name field_type;
 
Дараах код нь категорийн төрөл дэх картын төрлийг харуулна. Энд бид имэйл нэртэй шинэ салбар нэмж байна.
 
 cqlsh:tutorialspoint> ALTER TYPE card_details ADD email text;
 
**Баталгаажуулалт**
 
DESCRIBE тушаалыг ашиглан шинэ талбарыг нэмсэн эсэхийг шалгана уу.
 
 cqlsh:tutorialspoint> describe type card_details;	
 CREATE TYPE tutorialspoint.card_details (
 num int
 pin int,
 name text,
 cvv int,
 phone set,
 );
 
**Талбарыг төрөл хэлбэрээр өөрчлөх**
 
Хэрэглэгчийн тодорхойлсон өгөгдлийн төрлийг өөрчлөхийн тулд дараах синтаксийг ашиглана уу.
 
 ALTER TYPE typename
 RENAME existing_name TO new_name;
 
Дараах код нь төрөл дэх талбарын нэрийг өөрчилдөг. Энд бид талбар имэйлийг шуудангаар нэрлэх болно.
 
 cqlsh:tutorialspoint> ALTER TYPE card_details RENAME email TO mail;
	
**Баталгаажуулалт**
 
DESCRIBE тушаалыг ашиглан төрөлтийн нэр өөрчлөгдсөн эсэхийг шалгана уу.
 
 cqlsh:tutorialspoint> describe type card_details;
 CREATE TYPE tutorialspoint.card_details (
 num int,
 pin int,
 name text,
 cvv int,
 phone set,
 mail text
 );
 
	
**Хэрэглэгчийн тодорхойлсон өгөгдлийн төрлийг устгах**
 
DROP TYPE нь хэрэглэгчийн тодорхойлсон өгөгдлийн төрлийг устгахад хэрэглэгддэг тушаал юм. Доорх бол хэрэглэгчийн тодорхойлсон өгөгдлийн төрлийг устгах жишээ юм.
 
**Жишээ нь**
 	
Хас устгахаас өмнө доор тайлбарласны дагуу DESCRIBE_TYPES командыг ашиглан хэрэглэгчийн тодорхойлсон өгөгдлийн төрлүүдийн жагсаалтыг баталгаажуулна уу.
 	
 cqlsh:tutorialspoint> DESCRIBE TYPES;	
 card_details card
 
Хоёр төрлөөс эхлэн нэрлэсэн картыг доор үзүүлснээр устгах хэрэгтэй.

 cqlsh:tutorialspoint> drop type card;
 

Өгөгдлийн төрлийг хассан эсэхийг шалгахын тулд DESCRIBE командыг ашиглана уу.
 
 cqlsh:tutorialspoint> describe types;	
 card_details.

Ангилал:Чөлөөт өгөгдлийн сангийн менежментийн систем
Ангилал:NoSQL
Ангилал:Үүлэн тооцоолол
Cassandra
Ангилал:Фэйсбүүк