எளிய தமிழில் DevOps-9

MongoDB

MongoDB என்பது திறந்த மூல மென்பொருள் கருவி ஆகும். இது NoSQL-ஐ அடிப்படையாகக் கொண்டு இயங்குகின்ற டேட்டாபேஸ் சேவையகம் ஆகும். அதாவது அட்டவணைகளில் சேமிக்க இயலாத தரவு அமைப்புகளையும் சேமிக்க வழிவகை செய்யும் டேட்டாபேசுக்கு NoSQL என்று பெயர். இதில் கீழ்க்கண்டவாறு பல்வேறு வகைகள் உள்ளன.

Document oriented – MongoDB,CouchDB

column oriented – Cassandra,Hbase

key value – Redis, Riak

graph – Neo4j,GraphDB

இவற்றுள் Mongo DB- ஐப் பற்றி இப்பகுதியில் காணலாம். இதுவும் key-value pair முறையில் அமையும் json வடிவ தரவுகளை சேமிக்கக் கூடியதுதான். ஆனால் சேமிக்கும்போது அதனை பைனரியாக மாற்றி bson (binary form of json) வடிவில் டாக்குமென்ட்டாக சேமிப்பதால் இது document oriented-க்கான டேட்டாபேஸாக அமைகிறது.

Installation

1. முதலில் MongoDB-க்கான பப்ளிக் GPG Key-(GNU Privacy Guard) அதற்கான முகவரியில் சென்று இறக்குமதி செய்து கொள்ளவும். இது ஓகே என்று வெளிப்படுத்தாமல், gnupg இல்லை என்று வெளிப்படுத்தினால், முதலில் அதனை நிறுவிவிட்டு பின்னர் இக்கட்டளையை அளிக்கவும்.

$ wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -

2. அடுத்து MongoDB-க்கான பேக்கேஜை இறக்குமதி செய்து கொள்ளவும். நமது உபுண்டு கணினியில் பயோனிக் & ஜெனியல் என்று இரண்டு பதிப்புகள் உள்ளன. lsb_release -a எனக் கொடுத்து என்ன பதிப்பு உள்ளது என்பதைத் தெரிந்து கொண்டு அதற்கேற்றவாறு கீழ்கண்ட கட்டளையை அளிக்கவும். xenial என வெளிப்படுத்தினால் கீழ்கண்ட கட்டளையில் ubuntu bionic என்ற இடத்தில் ubuntu xenial எனக் கொடுக்கவும்.

$ echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list

3. Advanced Package Tool (APT) ரெப்பாசிட்டரியை புதுப்பிப்பதற்கான கட்டளையை இயக்கி விட்டு பின்னர் mongodb-ஐ நிறுவுவதற்கான கட்டளையை இயக்கவும்.

$ sudo apt-get update
$ sudo apt-get install -y mongodb-org

4. கீழ்க்கண்ட கட்டளைகள் , mongo db-ன் சேவைகளைத் துவங்குதல், நிறுத்துதல் நிலைப்பாட்டினை வெளிப்படுத்துதல் போன்ற வேலைகளைச் செய்கிறது. .

$ sudo service mongod start
$ sudo service mongod stop
$ sudo service mongod restart
$ sudo service mongod status

Mongo Shell

மாங்கோவுக்கான சேவையைத் துவங்கியவுடன் நமது டெர்மினலில் மாங்கோ எனக் கொடுத்து உள் நுழைந்தால் அதனுடன் வினவுவதற்குத் தேவையான இடத்தை நாம் சென்றடைந்து விடுவோம்.

$ mongo

உள் நுழைந்தவுடன் என்னென்ன தரவுத்தளங்கள் உள்ளது எனக் காண,

 > show dbs

பின் ஒரு புதிய தரவுத்தளத்தை உருவாக்க,

> use exams

டேட்டாபேசை உருவாக்கிய உடன் அதனைக் காண இயலாது. ஏதேனும் தரவுகளை உட்செலுத்தி show dbs எனக் கொடுத்தால்தான் அதனைக் காணலாம்.

> db.exams.insert({"Language":"Tamil,English"}) 
> show dbs


அடுத்து exams எனும் டேட்டாபேசுக்குள் staff என்ற புதிய கலெக்சனை உருவாக்க மற்றும் தரவுகளை உட்செலுத்த,

> db.staff.insert({"name":"Perumal","age":42})

இங்கு db.staff என்பது exams.staff என்பதைக் குறிக்கிறது. இவ்வாறாக டேட்டாபேஸ் மற்றும் கலெக்சன் இரண்டையும் இணைத்துக் குறிப்பிடுவதே namespace ஆகும்.

இதுவரை உருவாக்கப்பட்ட கலெக்சன்களைக் காண,

> show collections


இங்கு exams எனும் டேட்டாபேசில் இருக்கும் அனைத்து கலெக்சன்களையும் பட்டியலிடுகிறது.

ஒன்றுக்கும் மேற்பட்ட json கோப்புகளை ஒரு கலெக்சனில் சேர்க்க,

> db.books.insert([
{_id: ObjectId(),title: 'PHP in tamil',author: 'Priya',cond:'good',url:'http://freetamilebooks.com'},
{_id: ObjectId(),title: 'Mysql in Tamil',author: "Nithya D", cond:'Average', url:'http://freetamilebooks.com',likes: 20,comments: [{user:'Mahesh',message: 'Very useful madam', dateCreated: new Date(2015,07,25,4,45),like: 1}]}
])

ஒரு கலெக்சனில் சேமிக்கப்பட்டுள்ளவற்றைக் காண,

>db.books.find()


இதில் _id என்பதுதான் ஒவ்வொரு document-க்குமான object id ஆகும். இதுவே அதற்கான index-ஆக அமையும். ஒரு கலெக்சனை நீக்க db.staff.drop() என அதன் பெயரைக் குறிப்பிட்டுக் கூற வேண்டும். ஆனால் ஒரு டேட்டாபேஸை நீக்க dp.dropDatabase() எனக் கொடுத்தால் போதுமானது. தற்போது இயக்கத்தில் இருக்கும் டேட்டாபேஸ் நீங்கிவிடும். மேலும் டேட்டாபேசிலிருந்து document-ஐ நீக்குவது என்பது டிஸ்க்கிலிருந்தே அதனை நீக்குவதற்குச் சமம் ஆகும்.

Kafka to MongoDB

இப்போது கஃப்காவின் புரொடியூசர் கன்ஸ்யூமர் ஆகிய இரண்டையும் பைத்தான் மொழியில் எழுதுவோம். ஏற்கனவே புரொடியூசருக்கான ப்ரோக்ராம் எழுதப்பட்டு விட்ட நிலையில் இப்போது கன்ஸ்யூமராக மாங்கோ db-ஐ அமைப்பதற்கான புரோகிராம் கீழ்க்கண்டவாறு. இதனை consumer.py எனும் பெயரில் எழுதி சேமிக்கவும்.


from pykafka import KafkaClient
from pymongo import MongoClient
import json
import sys
K_client = KafkaClient(hosts='localhost:9092')
topic = K_client.topics['dataets']
consumer = topic.get_simple_consumer(consumer_timeout_ms=5000)
M_client = MongoClient('localhost',27017)
db = M_client.records
collection = db.data
counter = 1
for i in consumer:
i = {str(counter):str(i.value.decode("utf-8")) }
collection.insert_one(i)
counter = counter + 1

ஏற்கனவே புரொடியூசருக்கான ப்ரோக்ராம் இயங்கி dataets என்கிற டாப்பிக்கிற்குள் தரவுகளை செலுத்திக் கொண்டே இருக்கும். இப்போது இந்த கன்ஸ்யூமருக்கான ப்ரோக்ராமை இயக்கும் போது அது dataets என்கிற டாப்பிக்கிலிருந்து எடுத்து மாங்கோ db-ல் தரவுகளை செலுத்திக் கொண்டே வரும்.


ஆகவே இத்தகைய புரொடியூசர் மற்றும் கன்ஸ்யூமர் ஆகிய இரண்டையும் இணைக்கின்ற டாப்பிக் என்ற ஒன்றுதான் இங்கு channel என்று அழைக்கப்படும். இத்தகைய சேனல் வழியேதான் இவை இரண்டும் பேசிக்கொள்ளும். இப்போது மாங்கோவில் சென்று பார்த்தால் நிரலில் கொடுக்கப்பட்டுள்ளது போல records எனும் db உருவாக்கப் பட்டிருப்பதைக் காணலாம். அதற்குள் data எனும் கலெக்சனில் தரவுகள் சேமிக்கப்பட்டுள்ளதை அறியலாம்.

அடுத்ததாக டேட்டாபேஸில் இருக்கும் தரவுகளை backup எடுத்தல், மற்றொரு சர்வருக்கு மாற்றுதல் போன்ற பல்வேறு பணிகளைத் திட்டமிட்டு நடத்த உதவும் Airflow எனும் கருவியைப் பற்றிக் கொஞ்சம் பார்க்கலாம். at, crontab போன்ற கட்டளைகள் ஏற்கனவே லினக்ஸ்சில் இருந்தாலும் தற்போது பிக் டேட்டா என்று வரும்போது, பல்லாயிரக்கணக்கான கிளஸ்டர்களில் ஓடிக்கொண்டிருக்கும் பல்வேறு பணிகளை மேற்பார்வை செய்யும் பொறுப்பு நம்மிடம் வருகிறது. இதற்கான வசதி வெறும் அக்கட்டளைகளில் இல்லை. ஆகவே இதற்கென ஒரு UI interface தேவைப்படுகிறது. இந்தத் தேவையை பூர்த்தி செய்வதற்காக வந்ததே Airflow ஆகும். இதைப் பற்றி அடுத்த பகுதியில் காணலாம்.

%d bloggers like this: