no sql

OrientDB คืออะไร พร้อมวิธีการติดตั้งและการใช้งานเบื้องต้น

OrientDB คืออะไร ?

  • ฐานข้อมูลแบบ NOSQL ที่วางวิสัยทัศน์เรื่อง Hybrid มาตั้งแต่ปี 2009
    ก่อนที่ Gartner จะออกบทวิเคราะห์
  • รองรับรูปแบบของ NOSQL ทั้ง4 ประเภท
  • การผสมระหว่าง Relational และ NoSql จึงง่ายต่อการทำความเข้าใจสำหรับผู้ที่เคยใช้ Relational Database
  • ใช้ภาษา SQL ในการบริหารจัดการข้อมูล ไม่ต้องเรียนรู้ใหม่หมด
  •  Opensource apache 2.0 ฉะนั้นฟรีแน่นอน

มาดูปัญหาของ Relational Database และ Nosql

ปัญหาของ Relational DB

  • เมื่อข้อมูลใหญ่ขึ้นจะมาปรับเปลี่ยนโครงสร้างทีหลังทำได้ยาก เช่น เพิ่มคอลัมน์ เปลี่ยนแปลง
    ชนิดข้อมูลของคอลัมน์เดิม ฐานข้อมูลต้องทำการแสกนทั้งตาราง การขยายระบบให้ทำงาน
    หลายๆเครื่อง ส่วนใหญ่ต้องปรับสร้างให้เท่ากันใหม่ตั้งแต่แรก
  • การ Join ข้อมูลข้ามตารางมากๆ กับข้อมูลมหาศาลมีผลต่อความเร็วในการประมวลผล
  • การขยายระบบมีขั้นตอนยุ่งยาก

ปัญหาของ NoSQL

  • การเก็บข้อมูลที่ซ้ำซ้อน
  • ทำงานฟังก์ชั่นการ Join Aggregate Function ที่ต้องการผลลัพธ์จากข้อมูลปริมาณมากได้ไม่ดี
    เท่า Relational DB
  • ไม่มีมาตรฐานกลาง ต้องเรียนรู้ใหม่ทุกตัวที่ใช้งาน

และทำไมต้อง OrientDB

  •  เป็น NoSQL รองรับฟังก์ชั่น Join และ Aggregation ได้ดี
  • รองรับภาษา SQL ทำให้คนที่มีพื้นฐาน SQL ลดเวลาในการเรียนรู้
  • เป็น Restful Api ได้ในตัวเอง
  • เป็น Memory DB ได้ ไม่ต้องเรียนรู้ตัวอื่นเพิ่ม
  • รองรับการเก็บข้อมูลแบบ Regular Expression สำหรับสร้าง Format
    พิเศษ
  • มีฟังก์ชั่นบางอย่างที่หลายๆฐานข้อมูลไม่มีและทำได้ดี เช่น Median
  • ลดการเก็บข้อมูลที่ซับซ้อน
  • รันได้บนทุกระบบปฏิบัติการที่ Java รองรับ
  • มี Driver สำหรับทุกๆภาษายอดนิยม
  • ขยายระบบได้ไม่ยุ่งยาก
  • Opensource apache 2.0 ฟรีทุกกรณี

ติดตั้ง OrientDB

  1. ติดตั้ง JDK JDK Download
  2. Download OrientDB Download แยกไฟล์
  3. สร้างตัวแปร ORIENTDB_HOME ใน Environment variable และก็ชี้มาที่ Path เก็บ OrientDB ของเครื่องเรา

หรือ ผ่าน Command Line โดย

Mac / Linux
export ORIENTDB_HOME=$orientdb_directory
Windows
set ORIENTDB_HOME=$orientdb_directory

รัน OrientDB

เปิด Terminal

  1. เข้าไปที่ Directory ที่เก็บ Folder OrientDB ไว้
  2. เข้าไปที่ xxx/orientdb-1/binorientdb-1
  3. เปิด server.sh ไฟล์orientdb-2
  4. เปิด Browser พิมพ์ http://localhost:2480/

orientdb-3

เท่านี้ก็สามารถเรียกใช้งาน OrientDB ได้แล้ว

Elasticsearch คืออะไร ติดตั้งอย่างไร ใช้งานอย่างไร พร้อม Workshop ตัวอย่าง

logo-elastic

            ณ ปัจจุบันระบบการค้นหาข้อมูลในระบบของฐานข้อมูล RDBMS (Relational database management system) คงหนีไม่พ้นคำสั่งเหล่านี้ SELECT … FROM [table] WHERE [COLUMN] like ‘%word%’ … ก็ถือว่าเป็นคำสั่งพื้นฐานสำหรับการค้นหาข้อมูลที่ต้องการจาก Database ของเรา ข้อมูลหลักร้อย พัน หรือ แสนแถว ระบบความเร็วในการค้นหาก็ยังถือว่าพอรับได้ แต่เมื่อ Database ของเราเริ่มใหญ่ขึ้นข้อมูลมีจำนวนหลัก สิบล้าน ร้อยล้านแถว ก็เกิดปัญหาเรื่องประสิทธิภาพเรื่องความเร็วในการค้นหาข้อมูล ความเร็วในการค้นหาเริ่มที่จะช้าลงเป็นอย่างมาก … แล้วปัญหานี้จะมีเครื่องมืออะไรมาช่วยได้บ้าง




            ปัจจุบัน เครื่องมือที่ช่วยมาตอบโจทย์เรื่องนี้ก็มีมากมายแบบทั้งที่ฟรีและมีค่าใช้จ่าย แต่ในเมื่อมันมีของฟรีให้ใช้ให้ลอง ทำไมเราจะไม่เอามาใช้ละ

            Elasticsearch ช่วยแก้ปัญหานี้เลย

ต้นกำเนิด Elasticsearch

  • ถูกสร้างเมื่อปี 2010
  • โดยเวอร์ชั่น 0.4 เป็นเวอร์ชั่น แรกที่ถูกปล่อยออกมาให้ได้ใช้งานกัน
  • พัฒนาโดย Shay Banon
  • ถูกพัฒนาต่อยอดมาจาก apache lucene
  • พัฒนาด้วยภาษา Java
  • เวอร์ชั่น ปัจจุบัน 5.3 (อัพเดทเมื่อวันที่ 25-04-2017)

Elasticsearch คืออะไร

  • Open sources (เปิดให้ใช้งานพัฒนาต่อยอด ได้ฟรี)
  • Distributed (การกระจายตัว) & Scalable (ปรับขนาดได้)
  • Highly Availability การการะจายตัวสำรองข้อมูลอัตโนมัติ
  • Document Oriented (พื้นฐานการทำงานทั้งหมดทำในรูปแบบของ Json format) หรือ Haml format ก็สามารถทำได้
  • รองรับการทำงานในรูปแบบของ RESTful API (GET,PUT,POST,DELETE)
  • Full Text Search Engine
  • Real time search and analytics data

การเปรียบเทียบโครงสร้างระหว่าง RDBMS vs Elasticsearch

rdbms_vs_elasticsearch

การติดตั้ง Elasticsearch (1.7.2)

  1. Download Elasticsearch ก่อนจาก elasticsearch-1.7.2.zip
  2. Unzip elasticsearch-1.7.2.zip แล้วจะได้
  3. directory_unzipเข้า folder elasticsearch-1.7.2 ด้วยคำสั่ง
    $ cd elasticsearch-1.7.2
  4. สั่ง run Elasticsearch ด้วยคำสั่ง
    $ bin\elasticsearch.bat

    run_elasticsearch

  5. เปิด Browser แล้วพิมพ์  http://localhost:9200/

localhost

การติดตั้งตัวช่วย เพิ่มการใช้งานของ Elasticsearch ให้ง่ายขึ้นด้วย Marvel

  1. ให้ไปติดตั้ง plugin marvel เพิ่มกันก่อนโดยให้เข้าไปที่ elasticsearch1.7.2 แล้วพิมพ์
    $ bin\plugin -i elasticsearch\marvel\latest (สำหรับ Windown OS) สำหรับผมเคยติดตั้งไปแล้ว
  2. mavelเมื่อติดตั้ง เรียบร้อยให้ Restart Elasticsearch อีกครั้ง (สำหรับท่านใดที่ยังเปิดมันอยู่)
  3. ให้เปิด Browser แล้วพิมพ์ http://localhost:9200/_plugin/marvel
  4. mavel_1ส่วนเมนูที่เราจะเข้าไปใช้งานกันก็คือ เมนู Sensemavel_2
  5. เปิดมาแล้วก็จะพบ  UI แบบนี้

mavel_3




ตัวอย่างการใช้งาน ทำระบบ ร้านหนังสือ

กำหนดค่า

INDEX (DATABASE ใน RDBMS) :: bookstore

TYPE (TABLE ใน RDBMS) :: book

DOCUMENT (ROW ใน RDBMS) :: 1,2,…

FIELD (COLUMN ใน RDBMS) :: {“name”: “value”,”price” : value , “page” : value,”published_date” : value}

ตัวอย่าง

การเพิ่มข้อมูล (ต้องการเพิ่มข้อมูล หนังสือโดยให้มีเลข Document เท่ากับ 1)

PUT bookstore/book/1

{

     "name"  : "poolsawat.com",

     "price" : 390,

     "pages" : 200,

     "published_date" : "2015/09/23"

}

 

create

การแก้ไข (ต้องการแก้ไขข้อมูลหนังสือ ที่ Document ที่ 2)

POST bookstore/book/2

{

    "name"  : "poolsawat.com id 1",

    "price" : 490,

    "pages" : 200,

    "published_date" : "2015/09/23"

}

 

update

การลบ DELETE (ต้องการลบข้อมูลที่มีเลข Document เท่ากับ 2)

DELETE bookstore/book/2

delete

การค้นหา (ต้องการค้นข้อมูล ทุก Field ที่มีคำว่า “poolsawat.com”)

GET bookstore/book/_search?q=poolsawat.com

search

DLS (Domain Specific Language) search การค้นหาแบบขั้นสูง (ต้องการค้นหาข้อมูล ที่ Field ชื่อว่า name ที่มีค่า “poolsawat.com” กรองข้อมูลด้วยว่า ราคาหนังสือต้องมากกว่าหรือเท่ากับ 300 บาท)

GET bookstore/book/_search

{

    "query": {

       "filtered": {

          "query": {

               "match": {

                   "name": "poolsawat.com"

                }

            },

            "filter": {

                 "range": {

                     "price": {

                           "gte": 300

                       }

                  }

             }

         }

     }

}

 

dls_search




สำหรับฟังก์ชันสำหรับการ search ของ Elasticsearch นี้มีเยอะมาก จากตัวอย่างการค้นหาเป็นเพียงส่วนหนึ่งของการค้นหาแบบทั่วไป

สำหรับใครที่ต้องการดูข้อมูลเพิ่มเติมหรือกำลังต้องการหา Video เรียนผมแนะนำ coursesquare สอน Elasticsearch

ขอขอบคุณ แหล่งที่มารูปภาพประกอบ :: http://www.sprint3r.com/

MongoDB กับ Query และ คำย่อของเครื่องหมายพื้นฐาน

mongodb

MongoDB คือ document-oriented database ซึ่งไม่เหมือนฐานข้อมูลแบบเดิมที่เราเคยใช้งานกันมา มีข้อดีเรื่องการรองรับขนาดของข้อมูลได้แบบมหาศาล ดังนั้นเรื่องคำสั่งแน่นอนว่าต้องมีเอกลักษณ์เฉพาะของมันเองด้วยเช่นกัน และสิ่งที่เป็นรูปแบบมาตรฐานคือเรื่องเครื่องหมายที่มีรูปแบบเป็นของตัว MongoDB เอง

 ตัวอย่างที่ไปพบเจอ

db.example.find({'age':{$gt:33,$lte:40}})})




เกิดความสงสัยว่าตัวแปร $gt,$lte คืออะไรและมีความหมายว่าอย่างไร ไปตามค้นหาจนไปเจอ document ของ MongoDB บอกไว้ว่าถ้าต้องการจะใส่เงื่อนไขในการค้นหาข้อมูลก็ให้ใช้ ตัวแปรเหล่านี้แทนเพื่อที่ MongoDB เองจะอ่านเข้าใจและไปค้นหาข้อมูลมาให้ได้ถูก

เครื่องหมายใช้สำหรับเปรียบเทียบ

ชื่อ คำอธิบาย เปรียบได้กับ ตัวอย่าง
$eq  เปรียบเทียบคอลัมน์ที่มีค่าเท่ากับ ค่าที่ระบุ ==
db.example.find( { col1: { $eq: 20 } } )
 $gt  เปรียบเทียบคอลัมน์ที่มีค่าที่มากกว่า ค่าที่ระบุ >
db.example.find( { col1: { $gt: 20 } } )
 $gte  เปรียบเทียบคอลัมน์ที่มีค่าที่มากกว่าหรือเท่ากับ ค่าที่ระบุ >=
db.example.find( { col1: { $gte: 20 } } )
$lt  เปรียบเทียบคอลัมน์ที่มีค่าน้อยกว่า ค่าที่ระบุ  <
db.example.find( { col1: { $lt: 20 } } )
$lte  เปรียบเทียบคอลัมน์ที่มีค่าที่น้อยกว่าหรือเท่ากับ ค่าที่ระบุ  <=
db.example.find( { col1: { $lte: 20 } } )
$ne เปรียบเทียบคอลัมน์ที่มีค่าทั้งหมดที่มีไม่เท่ากับค่าที่ระบุ !=
db.example.find( { col1: { $ne: 20 } } )
$in เปรียบเทียบคอลัมน์ที่มีค่าตรงกับค่าใด ๆ ที่ระบุไว้ในอาร์เรย์ == []
db.example.find( { col1: { $in: [10,20] } } )
$nin เปรียบเทียบคอลัมน์ที่มีค่าไม่ตรงกับค่าที่ระบุในอาร์เรย์ !=[]
db.example.find( { col1: { $nin: [10,20] } } )

เครื่องหมายที่ใช้เชิงตรรกะ

ชื่อ คำอธิบาย เปรียบได้กับ ตัวอย่าง
$or เปรียบเทียบแบบเลือกอย่างใดอย่างหนึ่ง OR || หรือ
db.example.find( { 
$or: [ { quantity: { $lt: 20 } }, { price: 10 } ] 
} )
$and  เปรียบเทียบแบบจำเป็นต้องเลือกข้อมูลที่เข้าเงื่อนไขทั้งหมด AND || และ
db.example.find( { 
$and: [ { price: { $ne: 1.99 } }, { price: { $exists: true } 
} ]
$not   เปรียบเทียบแบบต้องการข้อมูลที่ไม่เข้าเงือนไขทั้งหมด NOT || ไม่ต้องการ
db.example.find( { 
price: { $not: { $gt: 1.99 } } 
} )
$nor  เปรียบเทียบแบบข้อมูลทั้งหมดที่ไม่ตรงกับคำสั่งทั้งสอง NOR || ไม่ต้องการ
db.example.find( { 
$nor: [ { price: 1.99 }, { sale: true } ] 
} )




นอกจากนี้ยังมีพวก เปรียบเทียบ Element,Evaluation,Geospatial,Array และคอมเม้นคำอธิบาย Comments ข้อมูเหล่านี้สามารถไปเข้าไป API Document ของ MongoDB ได้เพิ่มเติมจาก docs.mongodb.org

เริ่มการติดตั้ง MongoDB เบื้องต้น

MongoDB คืออะไร

MongoDB เป็น database แบบ NoSQL ก็กำเนิดเกิดขึ้นเมื่อ ปี 2541  โดยนาย Carlo Strozzi ให้นิยามของ MongoDB นี้ว่า

เป็นระบบ database ที่ทำงานโดยมีความสัมพันธ์กัน(relational) แต่ว่าทำงานได้เบากว่ามาก และไม่ได้ใช้ภาษา SQL ในการทำงาน

ข้อดี-ข้อเสีย MongoDB

  • เก็บข้อมูลแบบ Document – คือการเก็บข้อมูลในรูปแบบที่เป็น Pattern แบบมีโครงสร้าง (แตกต่างกับ Mysql ที่เก็บข้อมูลแบบหลายมิติ แต่ MongoDB จะเก็บข้อมูล แบบ Array คือจะเป็นแบบมิติเดียว)
  • รองรับการทำ Full Index – มีข้อดีในการ search หาได้อย่างรวดเร็วกับข้อมูลที่มีปริมาณมหาศาล
  • รองรับ การขยายขนาด และ รองรับการทำงานหนักๆ – เพราะว่าเน้นรองรับงานหนัก และ ปริมาณข้อมูลมากๆ สามารถขยายขนาดได้อย่าวรวดเร็ว
  • ทำระบบสำรองได้ง่าย – เราสามารถเพิ่มระบบเพื่อทำงานเป็นตัวหลัก ตัวรอง หรือว่า เป็นหลายๆตัวช่วยกันทำงาน ได้อย่างง่ายๆ ไม่ต้องตั้งค่าอะไรเยอะแยะ
  • การเรียกข้อมูลมากแสดง – อย่างที่บอกว่า เป็นการเก็บข้อมูลแบบโครงสร้าง ดังนั้นเวลาเรียกข้อมูลมาแสดงก็จะได้ทั้งโครงสร้างของข้อมูลออกมาเลย
  • แก้ไขข้อมูลได้รวดเร็ว – หากเราใช้ MySQL แล้วศึกษาลึกๆ จะพบว่าการ query update จะทำให้ตารางนั้น lock จังหวะที่ update แต่ว่า MongoDB ไม่เป็นอย่างนั้น
  • เขียนชุดคำสั่งการทำงานได้ – หากเรามีการทำงานหลายขั้นตอน แบบซ้ำๆ เมื่อเกิดการทำงานในลักษณะแบบใด เราก็จัดกลุ่มคำสั่งที่ทำซ้ำๆแล้วเขียนเหมือนเป็น script เอาไว้เลย เวลานันก็รันทั้งก้อนนี้เลย
  • เก็บข้อมูลด้วยระบบ GridFS – เป็นระบบการเก็บไฟล์บนพื้นที่ Harddisk ที่เก็บข้อมูลเป็นก้อนๆ และรองรับการเพิ่มหรือลดของปริมาณข้อมูลได้
  • มีบริการสอบถามและดูแลเป็นพิเศษ – มี service ดูแลอย่างดีเป็นพิเศษ ให้คำปรึกษาพร้อมดูแลอย่างใกล้ชิด โดยบริษัท 10gen, Inc แต่ก็แน่นอนว่าไม่ฟรีนะสำหรับการบริการพิเศษแบบนี้

เริ่มการติดตั้ง MongoDB บน Windown

1.  ดาวน์โหลด MongoDB : https://www.mongodb.org/downloads

download_mongodb

 

2. ติดตั้ง

mongodb_install_1

2.1  กด Next จนเสร็จสิ้น
mongodb_install_finish

 

2.2 กด Finish

3.  เปิด cmd เข้าไปที่ path ของ mongoDB ที่ติดตั้ง (ถ้าตอนติดตั้งไม่ได้เปลี่ยนแปลงค่า จะเป็น C:\Program Files\MongoDB\Server\3.0\bin)

โดย พิมพ์

=> cd C:\Program Files\MongoDB\Server\3.0\bin [Enter] (แล้วแต่จะ ติดตั้งไว้ที่ใดของเครื่อง)

cmdcd mongo 3.1  จะใช้งานฐานข้อมูลของ MongoDB ได้จำเป็นต้องมีที่เก็บข้อมูล ให้เราไปสร้าง directory เก็บข้อมูลก่อน ในที่นี่ ผมขอใช้

mkdir \data\db จะได้ (C:data\db)

3.2  จากนั้นก็ไปกำหนดให้ MongoDB รู้จักที่เก็บฐานข้อมูลก่อน โดย พิมพ์

=> mongod.exe dbpath “C:data\db” [Enter]

3.3 ทดสอบการติดตั้ง โดยพิมพ์

=> mongod [Enter]  (MongoDB Server Start)

mongodb_start_server

ถ้าขึ้นแบบนี้แสดงว่า MongoDB Server Start แล้ว

ศึกษาข้อมูลเพิ่มเติม :: mongoDB manual

แนะนำแหล่งศึกษาเพิ่มเติม :: http://www.tutorialspoint.com/mongodb