Showing posts with label database. Show all posts
Showing posts with label database. Show all posts

Friday, August 22, 2014

ความแตกต่างระหว่าง Data Conversion กับ Data Migration

Data Migration 
เป็นการย้ายข้อมูลจากที่หนึ่งไปยังอีกที่หนึ่ง ซึ่งเป็นการย้ายข้อมูลที่มีการเปลี่ยนแปลงไม่มากนัก โดยเป็นการย้ายที่ physical data model หรือ structure ต่างๆ ยังคงเหมือนเดิม ตัวอย่าง เช่น

  • ย้ายข้อมูลจาก Hardware หรือ Platform หนึ่งไปยั้งอีก Hardware หรือ Platform หนึ่ง ซึ่งเกิดขึ้นเมื่อมีการ Upgrade Hardware 
  • มีการเปลี่ยนแปลง Version ของ DBMS ไปเป็น Version ใหม่กว่า เช่น SQL Server 2012 ไปเป็น SQL Server 2014
Data Conversion 
เป็นการแปลงข้อมูลจากรูปแบบหนึ่งไปเป็นอีกรูปแบบหนึ่ง ซึ่งอาจเป็นการแปลงโครงสร้างข้อมูลเก่าไปยังโครงสร้างใหม่ หรือการเปลี่ยนแปลงข้อมูลที่มีผลกับรูปแบบของข้อมูล ตัวอย่าง เช่น
  • ย้ายฐานข้อมูลจากฐานข้อมูล MySQL ไปยังฐานข้อมูล Oracle เพราะว่ามีการเปลี่ยนแปลง DBMS Provider
  • การแปลงข้อมูลจากฐานข้อมูลหนึ่งไปยัง XML Document
  • การแปลงข้อมูลภายในฐานข้อมูล Oracle ไปใช้ Schema แบบใหม่ แต่ยังคงใช้ฐานข้อมูล Oracle เช่นเดิม

สรุป การ Data Migration จะเป็นการย้ายข้อมูลจากระบบฐานข้อมูลหนึ่งไปยังฐานข้อมูลหนึ่งที่มีการเปลี่ยนแปลงไม่มากนัก ส่วน Data Conversion จะเป็นการแปลงข้อมูลจากรูปแบบหนึ่งไปเป็นอึกรูปแบบหนึ่ง



Ref :
http://erpschools.com/uncategorized/data-migration-vs-data-conversion-3
http://en.wikipedia.org/wiki/Data_conversion
http://en.wikipedia.org/wiki/Data_migration

Thursday, January 17, 2008

การทำ Index ของ Database

การทำ Index มีประโยชน์ในการค้นหาข้อมูล Query ได้รวดเร็ว โดยการค้นหาจะเป็นการกระโดดไปยังตำแหน่งที่ต้องการได้เลย ทำให้ไม่จำเป็นที่จะต้องค้นหาหมดทุก Row ทำให้ Query ได้เร็วกว่าเดิมมาก
1. ถ้าจะสร้างตาราง โดยจะใช้ field ที่เราใช้เป็นเงื่อนไขในการ query บ่อยๆ ก็สามารถสร้างตารางได้เลย เช่น
CREATE TABLE MyTransactionLogs
(
myKey INT AUTO_INCREMENT NOT NULL
myIndex TIMESTAMP NOT NULL
data1 VARCHAR(100)
data2 VARCHAR(100)
data3 VARCHAR(100)
etc VARCHAR(255)
PRIMARY KEY(myKey)
INDEX (myIndex)
)
;

2. ถ้าต้องการปรับปรุงตาราง ที่สร้างไปแล้ว เพื่อจัด index ให้ข้อมูลในฟิล์ด myIndex ถ้า myIndex ไม่ได้สั่งให้เป็น index ตั้งแต่ตอนสร้างตาราง ก็สามารถใช้คำสั่ง ข้างล่างนี้ จะทำให้ Query เร็วขึ้นมาก
ALTER TABLE MyTransactionLogs ADD INDEX(myIndex);
การจัดการ index ของตารางที่มมีฐานข้อมูลอยู่แล้ว จะเป็นการนำข้อมูลทั้งหมดของฟิล์ดที่เราต้องการจัด index มาจัดเรียง ทำให้เราต้องเสียพื้นที่(disk space) ในการจัดเก็บข้อมูลเพิ่มขึ้น ดังนั้นจึงไม่ควรจัด index ให้กับทุกฟิล์ดในตาราง ซึ่ง Field ที่ควรจัดเก็บควรมีคุณสมบัติดังต่อไปนี้
  • Field ที่ใช้เป็นเงื่อนไขในการค้นหาข้อมูล (เวลา query อยู่หลัง WHERE ก็คือ Field ที่ควรทำ Index)
  • จัด index ให้กับฟิล์ดที่ใช้ในการจัดเรียง (GROUP BY, ORDER BY)
  • จัด index ให้กับ Foreign Keys ที่เราเอาไว้ JOIN
และขั้นตอนในการจัด index จะใช้เวลาพอสมควรขึ้นอยู่กับจำนวนของข้อมูลว่ามีมากน้อยเพียงใด แต่ถ้ามีข้อมูลเป็นหลัก ล้าน หรือมากกว่านั้นก็จะใช้เวลามากขึ้น
โดยขณะที่กำลังจัด index อยู่ ตารางจะถูก locked ไว้ เพื่อไม่ให้ใครมา insert/update/delete ได้ ถ้าตารางข้อมูลกำลังรันอยู่ที่ production และต้องมีการใช้งานอยู่ตลอดเวลา คุณอาจจะเลี่ยงไปทำตอนที่มี traffic การใช้งานน้อย เช่น ช่วงตี 3 - ตี 4 ซึ่งเป็นช่วงนี้ traffic น้อยที่สุด