วันอาทิตย์ที่ 27 พฤษภาคม พ.ศ. 2561

วันศุกร์ที่ 13 เมษายน พ.ศ. 2561

เปรียบเทียบประสิทธิภาพของ RDBMS 3 ตัว [MariaDB, SQLite, PostgreSQL]

[ ได้นำเสนอไปในสัปดาห์ที่ 6 ] Link

อุปกรณ์และโค้ดในการทดสอบ

  • สเปคโน๊ตบุ๊ค
  • ภาษาที่เลือกใช้ : Python 3.6
  • Library ที่เลือกใช้
    • Sqlite3
      • Sqlite3
    • MariaDB / MySQL
      • mysqlclient (MySQLdb)
    • PostgreSQL
      • psycopg2
  • โค้ดที่ใช้ในการทดสอบ

ทำการทดสอบ

    ในตอนแรกนั้นผมได้ทำการเขียนโค้ด generate ข้อมูลของนักศึกษาทั้งหมด 200,000 คน โดยจะมีข้อมูลเกรดคนละ 45 วิชา เพื่อทำการทดสอบ SQLite เพียงอย่างเดียว สรุปแล้วจะได้ออกมา 3 ตารางดังนี้
  • ตารางวิชา : 45 วิชา
  • ตารางรายชื่อนศ. : 200,000 คน (สุ่มชื่อนามสกุล)
  • ตารางเกรดของนศ.ทั้งหมด : 9,000,000 รายการ

    ทีนี้ต่อมาเลยคิดว่าจะทดสอบ RDBMS 3 ตัว จึงได้ export ข้อมูลข้างบนออกมาเป็นไฟล์ csv รวมแล้วได้ขนาดไฟล์ 476.9 MB จากนั้นก็ทำการทดสอบต่างๆ ซึ่งก็ได้ผลสรุปออกมาดังนี้


    จากผลลัพธ์ที่ได้ จะเห็นว่า SQLite จะใช้เวลาในการ import ที่น้อยกว่าอีก 2 ตัวมาก ส่วนในการ query จะใช้เวลาใกล้เคียงกับ PostgreSQL
    ส่วนข้อดีที่ผมคิดว่า MariaDB กับ PostgreSQL มีเหนือกว่า SQLite คงน่าจะเป็นในเรื่องของความปลอดภัยที่จะต้องใช้ username และ password ในการที่จะเข้าถึง database ได้ จึงเกิดความคิดว่าในโปรเจคของวิชา DATABASE SYSTEMS คงจะเลือกใช้ PostgreSQL ทั้งนี้ทั้งนั้นก็ต้องลองปรึกษากันในกลุ่มอีกที

วันจันทร์ที่ 9 เมษายน พ.ศ. 2561

Try DBMS ( MariaDB + HeidiSQL )

[ ได้นำเสนอไปในสัปดาห์ที่ 4 ]
Query คืออะไร?

    คิวรี่ (Query) เป็น Object ที่สำคัญมากในการประมวลผลและแสดงผล เนื่องจาก Table มีหน้าที่เก็บข้อมูล แต่ไม่มีเครื่องมือในการประมวลผล ดังนั้น การวิเคราะห์ การคำนวณ ต้องใช้คิวรี่ในการทำงาน และมีหน้าที่สำคัญ คือ

  • คัดเลือกเฉพาะข้อมูลที่ต้องการ โดยกำหนด Expression หรือค่าที่ต้องการ
  • แสดงกลุ่มข้อมูลที่ต้องการ สร้างคิวรี่จากหลาย Table โดยใช้การเชื่อมฟิลด์
  • ใช้ในการคำนวณใช้คำสั่ง Totals, ฟังก์ชัน และ Expression ของคิวรี่


What you have done/learned

    - ทำการติดตั้ง MariaDB ซึ่งในตัวติดตั้งจะแถมตัวโปรแกรม Client ที่ชื่อว่า HeidiSQL มาด้วย
    - สร้าง Database และ Table โดย Table จะแบ่งออกเป็น 3 Table และกำหนดรูปแบบตามที่ตกลงกันเอาไว้
    - โหลดไฟล์ CSV จาก Spreadsheet ที่ในกลุ่มได้ไปกรอกข้อมูลของแต่ละคนเอาไว้ จากนั้นก็ทำการ import ข้อมูลเข้าสู่ Database ผ่านโปรแกรม HeidiSQL
    - ลองใช้คำสั่ง Query ดูเล็กๆน้อยๆ


    - สามารถเซฟคำสั่ง SQL ที่ใช้ Query เป็นไฟล์ .sql ได้ (เปิดดูด้วย notepad ได้)
    - ภายในโปรแกรม HeidiSQL เราสามารถสร้าง User ใหม่ขึ้นมาได้ง่ายๆ


    - แต่ถ้าจะใช้คำสั่ง SQL เพื่อเพิ่ม User ก็ใช้คำสั่งตามนี้


Any problem/solution

    - ตอน install mariadb ได้กำหนด password ไว้ แล้วดันลืม ทำให้ไม่สามารถเปิด server เพื่อเข้าถึง Database ได้
    **** Uninstall mariadb ออกก่อน จากนั้นจึง install ใหม่อีกครั้ง โดยกำหนด password ที่จำได้ง่าย(แต่ไม่ถูกเดาง่ายจนเกินไป) และทำการจด password เก็บไว้กันลืมด้วย


Decision

    - เลือกใช้ MariaDB เพราะเห็นเพื่อนใช้ MySQL กันหลายคนจึงอยากลองใช้ตัวอื่นบ้าง และพบว่า MariaDB นั้นก็เป็นที่นิยมอยู่
    - เลือกใช้ HeidiSQL เพราะมันติดมากับตัว Install MariaDB


Reference

    - MariaDB : https://mariadb.com/
    - สไลด์นำเสนอสัปดาห์ที่ 4 : Link

เรียนรู้เรื่อง SQL และคำสั่งพื้นฐาน


[ ได้นำเสนอไปในสัปดาห์ที่ 3 ]

    SQL นั้นย่อมาจาก Structured Query Language เป็นภาษาที่ช่วยให้สามารถเข้าถึงและจัดการกับฐานข้อมูลได้ ซึ่งภาษา SQL นั้นก็จะเป็นมาตรฐาน ANSI อยู่ ( แม้ว่า SQL จะเป็นมาตรฐาน ANSI แต่ก็มีภาษา SQL ที่แตกต่างเวอร์ชั่น หรือ Syntax ที่ต่างกันอยู่ แต่พวกคำสั่งพื้นฐานจะยังคงเหมือนกัน)

    RDBMS นั้นย่อมาจาก “Relational Database Management System” แปลว่า “ระบบการจัดการฐานข้อมูลเชิงสัมพันธ์”  เป็นรากฐากของ SQL และระบบฐานข้อมูลต่างๆ
    ข้อมูลใน RDBMS จะถูกเก็บใน Database Object ที่เรียกว่า "Table" โดยจะเก็บข้อมูลที่มีความสัมพันธ์กัน ซึ่ง Table นั้นจะประกอบด้วย Field(Column)  และ Record(Row)



    Syntax ของภาษา SQL
  • พวก Keyword จะไม่สนตัวพิมพ์เล็กพิมพ์ใหญ่ เช่น KEYWORD keyword KeYwOrD สามตัวนี้ถือว่าเป็นตัวเดียวกัน
  • ต้องมี semicolon ( ; ) ลงท้ายทุก statement เพื่อบอกว่าจบ statement นั้นๆแล้ว
  •     
    ตัวอย่างคำสั่งพื้นฐานที่ใช้บ่อยๆ เช่น
  • CREATE DATABASE - ใช้ในการสร้าง Database ใหม่
  • ALTER DATABASE - ใช้สำหรับแก้ไข Database
  • DROP DATABASE - ใช้สำหรับลบ Database
  • CREATE TABLE - ใช้ในการสร้าง Table ใหม่
  • ALTER TABLE - ใช้สำหรับแก้ไข Table
  • DROP TABLE - ใช้สำหรับลบ Table
  • SELECT - ใช้เรียกดูข้อมูลใน database โดยระบุ table และ column ที่จะเรียกดูได้
  • UPDATE - ใช้สำหรับอัพเดทข้อมูลใน table ที่อยู่ใน database
  • DELETE - ใช้ลบข้อมูลใน table ที่อยู่ใน database
  • INSERT INTO - ใช้เพิ่มข้อมูลใหม่ลงไปใน table ที่อยู่ใน database
  • WHERE - ใช้ในการกำหนดเงื่อนไขเพื่อ filter ใช้ควบคู่กับคำสั่งอื่น เช่น SELECT, DELETE

Reference
    - ข้อมูล SQL และคำสั่งพื้นฐาน : https://www.w3schools.com/sql
    - สไลด์นำเสนอ Week 3 : Link

วันอังคารที่ 23 มกราคม พ.ศ. 2561

คำนวณ GPA ของแต่ละเทอมและ GPAX ด้วยข้อมูลจากไฟล์ CSV

- what you have done/learned

  • โหลดข้อมูลผลการเรียนจาก Spreadsheet ของงานที่แล้วในรูปแบบไฟล์ CSV
  • ทำการเขียนโค้ด โดยดึงค่าจากไฟล์ CSV มาคำนวณ



  • รูปแบบจากไฟล์ CSV ที่ใช้กับโค้ดนี้ได้
    • Row แรกจะต้องเป็นหัวข้อ จะใช้คำว่าอะไรก็ได้แต่การจัดเรียงต้องเป็นดังข้อถัดไป
    • Column แรกจะเป็นอะไรก็ได้ แต่ต้องไม่เว้นว่างไว้ (ชื่อวิชาดู เหมือนจะเป็นข้อมูลที่เหมาะสมที่สุด)
    • Column ที่สองต้องเป็น หน่วยกิตของวิชา และ Column ที่สามต้องเป็น เกรดของวิชานั้นๆ ตัวอักษรพิมพ์ใหญ่
    • จะมีเพิ่มอีกกี่ Column ก็ได้ แต่ 3 Column ต้องเป็นไปตามที่กำหนดไว้
    • ในแต่ละเทอมต้องมี Row ว่างปิดท้าย เพื่อบอกว่าเกรดของเทอมนั้นๆสิ้นสุดที่จุดนี้
  • ได้เรียนรู้ว่า Python ไม่มี Switch Case
  • ใช้ GIT PUSH ขึ้น GITHUB (ลิงค์อยู่ใน reference)

- any problem/solution

    ปัญหา
        เกิดการ Error ไม่สามารถ decode ได้ เนื่องจากหัวข้อเป็นภาษาไทย
    วิธีแก้
        เพิ่ม encoding='utf-8' เข้าไปในฟังก์ชั่น open
open('MyGrade.csv', encoding='utf-8')

    ปัญหา
        จะใช้ Switch Case ในการแปลงเกรดจากตัวอักษรให้เป็นตัวเลข แต่พบว่าในภาษา Python นั้นไม่มี Switch Case
    วิธีแก้
        ค้นหาข้อมูลจนเจอว่า ให้ใช้ Dictionary แทน โดยทำเป็น method รับค่า argument เข้ามาทำเช็คว่าตรงกับ key ใดแล้วจึง return value ของ key นั้นกลับไป และใส่ .get(x,defualt_value) เผื่อไว้ในกรณีที่ไม่ตรงกับ key ที่กำหนดไว้เลย

- decision

    เลือกใช้ภาษา Python เพราะว่าเคยใช้งานกับไฟล์ CSV ตอนที่เรียนวิชา Building Software II มาก่อนแล้ว

- reference

วันอังคารที่ 16 มกราคม พ.ศ. 2561

คำนวณ GPA บน Spreadsheet

- what you have done/learned

  • บันทึกผลการเรียนลงบน Spreadsheet ( Link ) และทำการคำนวณหา GPA
  • ได้เรียนรู้คำสั่งเบื้องต้นในการใช้ Spreadsheet
  • ได้เรียนรู้ว่า สามารถใช้การเขียนโปรแกรม(Javascript) มาใช้งานร่วมกับ Spreadsheet ได้

- any problem/solution

    ปัญหา
        พยายามจะใช้คำสั่ง if ร่วมกับ sum เพื่อแปลงตัวอักษรเป็นเกรดที่ได้เพื่อนำมาคำนวณหาแต้มระดับคะแนน โดยที่ไม่ต้องสร้างคอลัมม์ใหม่ แต่เหมือนจะทำไม่ได้(หรืออาจเป็นเพราะว่าใช้ไม่ถูกวิธีเอง)
    วิธีแก้
        ค้นพบว่าสามารถใช้การเขียนโปรแกรม(javascript)มาใช้ร่วมกับ Spreadsheet ได้ ซึ่งน่าจะเป็นวิธีที่ง่ายกว่า


- reference