Featured Post

E-mail Marketing การตลาดที่ไม่ควร

Real Estate คือธุระกิจอสังหาริมทรัพย์ ที่ใครหลาย ๆ คนใฝ่ฝันอยากเป็นเจ้าของ โดยมีสินทรัพย์ (Asset) เป็นบ้าน ที่ดิน ฯลฯ ซึ่งเป็นสิ่งทีทมีมูลค่าสูงมาก...

อ่านต่อ

Twitter จะเลิกใช้ MySQL เปลี่ยนเป็น Cassandra เข้าสู่ยุคของ NoSQL?

Posted by suthamas | Posted in ความรู้ทั่วไป | Posted on 18-03-2010

0

Ryan King วิศวกรของ Twitter ให้สัมภาษณ์กับบล็อก MyNoSQL ว่า Twitter มีแผนจะเปลี่ยนจากฐานข้อมูล MySQL ไปใช้ Apache Casandra ในเร็วๆ นี้ ด้วยเหตุผลเรื่องการขยายตัวของข้อมูล

ตอนนี้ Twitter ใช้คลัสเตอร์ MySQL ที่ใช้ memcache เข้าช่วย แต่พบว่าต้องใช้คนดูแลรักษามาก แถมอัตราการส่งข้อมูลยังเพิ่มมากขึ้นเรื่อยๆ ล่าสุดขึ้นมาที่ 50 ล้านครั้งต่อวันแล้ว (ข่าวเก่า Twitter มีผู้ส่งข้อความกว่า 600 ครั้งต่อวินาที) เราอาจบอกได้ว่า Twitter โตขึ้นมาถึงระดับที่ relational database เริ่มรับไม่ไหว

ทางออกของ Twitter จึงคล้ายกับรุ่นพี่อย่างกูเกิล (MapReduce/BigTable) ยาฮู (Hadoop) หรือ Facebook ซึ่งเป็นคนทำ Cassandra ฐานข้อมูลแบบกระจายศูนย์ ภายหลังโอเพนซอร์สและยกให้อยู่ในการดูแลของโครงการ Apache แนวทางนี้มีชื่อเรียกอย่างไม่เป็นทางการว่า “NoSQL” ซึ่งหมายถึงวิธีการเก็บข้อมูลแบบอื่นๆ ที่ไม่ใช่ relational database นั่นเอง

นอกจาก Twitter กับ Facebook แล้ว ลูกค้าของ Cassandra ยังมี Digg, Cisco, Rackspace

ที่มา : blognone.com

การเปรียบเทียบฐานข้อมูล SQL ชนิดต่างๆ

Posted by sunisa | Posted in Database | Posted on 10-07-2009

0

สรุปการเปรียบเทียบฐานข้อมูล SQL ชนิดต่างๆ

1.คำสั่ง Join

ทุกฐานข้อมูลสามารถใช้ INNER JOINs ได้ แต่ join types ประเภทอื่นๆ ไม่สามารถใช้ได้ทุกฐานข้อมูลแต่ขึ้นอยู่กับชนิดของฐานข้อมูล

yes = สามารถใช้งานได้

Join type/feature

PostgreSQL

DB2

MSSQL

MySQL

Oracle

Informix

Natural joins (only tested: NATURAL LEFT JOIN)

yes

yes

yes

USING-clause

yes

yes

yes

FULL joins1 (tested: SELECT…FULL JOIN…ON…=…)

yes

yes

yes

yes

yes

Explicit CROSS JOIN (cartesian product)

yes

yes

yes

yes

yes

yes

2. การเรียงลำดับข้อมูล

บางฐานข้อมูลจัดเรียงโดยค่าที่เป็น NULLs ถือว่ามีค่ามากกว่า non-NULL values เช่น PostgreSQL, DB2, Oracle และบางฐานข้อมูลจัดเรียงโดยค่าที่เป็น NULLs ถือว่ามีค่าน้อยกว่า

non-NULL values เช่น  MSSQL, MySQL, Informix เป็นต้น

รูปแบบคำสั่ง:

DECLARE cursorname CURSOR FOR
SELECT ... FROM ... WHERE ...
ORDER BY column_name1,column_name2,…

3.การใช้คำสั่ง SELECT

คำสั่ง SELECT ใช้ในการเลือกข้อมูลที่ต้องการ โดยการใช้คำสั่งเพื่อดึงข้อมูลที่เราต้องการออกมานั้นมีรูปแบบคำสั่งมาตรฐานหลายรูปแบบให้เลือกใช้  ขึ้นอยู่กับการสนับสนุนของฐานข้อมูล ซึ่งบางฐานข้อมูลไม่สนับสนุนรูปแบบมาตรฐานใดๆเลยและมีชุดคำสั่งเป็นของตัวเอง แบ่งเป็น 3 แบบ ได้แก่
Simple limit, Top-n, Limit—with offset

3.1 SELECT Simple limit มีคำสั่งมาตรฐาน 3 รูปแบบ ดังนี้

  • ใช้ FETCH FIRST:

รูปแบบคำสั่ง:
SELECT … FROM … WHERE … ORDER BY … FETCH FIRST n ROWS ONLY

  • ใช้ Window function: ใช้ฟังก์ชัน ROW_NUMBER() OVER

รูปแบบคำสั่ง:
SELECT * FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber,
columns
FROM tablename
) AS foo
WHERE rownumber <= n

  • ใช้ cursor:
    • DECLARE cursor-name CURSOR FOR …
    • OPEN cursor-name
    • FETCH …
    • CLOSE cursor-name

3.2 SELECT Top-n หรือ quota-queries มีคำสั่งมาตรฐาน 2 รูปแบบ ดังนี้

  • The fast variant: ใช้ window function ชื่อ RANK() OVER

รูปแบบคำสั่ง:
SELECT * FROM (
SELECT
RANK() OVER (ORDER BY age ASC) AS ranking,
person_id,
person_name,
age
FROM person
) AS foo
WHERE ranking <= 3

  • The slow variant:

ในกรณีที่ DBMS ไม่สนับสนุน elementary OLAP features

รูปแบบคำสั่ง:
SELECT * FROM person AS px
WHERE (
SELECT COUNT(*)
FROM person AS py
WHERE py.age < px.age
) < 3

3.3 SELECT Limit—with offset

  • ใช้ OFFSET and FETCH FIRST:

รูปแบบคำสั่ง:
SELECT…
FROM …
WHERE …
ORDER BY …
OFFSET skip ROWS
FETCH FIRST n ROWS ONLY

  • Using a window function: ใช้ฟังก์ชัน ROW_NUMBER() OVER

รูปแบบคำสั่ง:
SELECT * FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY key ASC) AS rownum,
columns
FROM tablename
) AS foo
WHERE rownum > skip AND rownum <= (n+skip)

  • ใช้ cursor:

รูปแบบคำสั่ง:

    • DECLARE cursor-name CURSOR FOR …
    • OPEN cursor-name
    • FETCH RELATIVE number-of-rows-to-skip …
    • CLOSE cursor-name

4. การใช้คำสั่ง INSERT

บางฐานข้อมูลสนับสนุนการใช้คำสั่งเพื่อ INSERT ข้อมูลทีละหลายๆแถวได้ เช่น PostgreSQL, DB2, MySQL

รูปแบบคำสั่ง:
INSERT INTO tablename VALUES (0,'foo') , (1,'bar') , (2,'baz');

มีค่าเท่ากับการใช้คำสั่ง

INSERT INTO tablename VALUES (0,'foo');
INSERT INTO tablename VALUES (1,'bar');
INSERT INTO tablename VALUES (2,'baz');

5. ข้อมูลชนิด Boolean

Boolean สามารถมีค่าดังต่อไปนี้

- True

- False

- UNKNOWN หรือ NULL (ถ้าไม่มีข้อจำกัดว่าห้ามมีค่า Null)

โดย True จะมีค่ามากกว่า False บางฐานข้อมูลมีตัวแปรชนิดนี้ และบางฐานข้อมูลไม่มีตัวแปรชนิดนี้ แต่มีการใช้ตัวแปรอื่นเพื่อเก็บค่าเหมือนกับตัวแปร Boolean เช่นในฐานข้อมูล DB2 ใช้ฟิลด์ข้อมูล CHAR(1) เพื่อเก็บค่า 0 กับ 1

6. ข้อมูลชนิด char

บางฐานข้อมูลมีรูปแบบตามมาตรฐานของข้อมูลชนิดนี้ และบางฐานข้อมูลรายละเอียดบางอย่างที่แตกต่างกันออกไป

7.ข้อมูลชนิด TIMESTAMP

มาตรฐานมี 2 แบบ ได้แก่

1. TIMESTAMP เช่น TIMESTAMP '2003-07-29 13:19:30'

2. TIMESTAMP WITH TIME ZONE เช่น TIMESTAMP '2003-07-29 13:19:30+02:00'
บางฐานข้อมูลสนับสนุนทั้ง 2 แบบ และบางฐานข้อมูลสนับสนุน TIMESTAMP  เพียงอย่างเดียว เช่น PostgreSQL

8. SQL functions

แต่ละฐานข้อมูลมีรูปแบบการเขียนคำสั่งแตกต่างกันไป โดยอาจยึดตามรูปแบบคำสั่งมาตรฐาน หรือมีความแตกต่างออกไป เช่น อาจมีชื่อคำสั่ง และพารามิเตอร์ที่ต่างกัน เช่น ตัวอย่างคำสั่งคืนค่าความยาวของข้อมูล CHARACTER

ตัวอย่างคำสั่ง รูปแบบมาตรฐาน:
CHARACTER_LENGTH(argument)

ตัวอย่างคำสั่ง ฐานข้อมูล Oracle:
LENGTH(TRIM(TRAILING FROM foo))

9. การเชื่อม string

รูปแบบมาตรฐาน: string1 || string2

แต่ละฐานข้อมูลมีรูปแบบคำสั่งและ syntax แตกต่างกันออกไป  ตัวอย่างเช่น MSSQL ใช้เครื่องหมาย + แทนเครื่องหมาย ||

10. Automatic key generation

ตัวแปรที่ใช้ในการระบุ IDENTITY แตกต่างกันในแต่ละฐานข้อมูล เช่น PostgreSQL ไม่สนับสนุนคำสั่งมาตรฐานแต่จะประกาศชนิดของคอลัมน์เป็น SERIAL เพื่อให้ข้อมูล auto-generated

ตัวอย่างคำสั่ง รูปแบบมาตรฐาน:

CREATE TABLE tablename (
tablename_id INTEGER GENERATED ALWAYS AS IDENTITY
...
)

ตัวอย่างคำสั่ง ฐานข้อมูล PostgreSQL:

CREATE TABLE tablename (
tablename_id SERIAL,
...
)

11. TRUNCATE TABLE operations

คำสั่ง TRUNCATE ของแต่ละฐานข้อมูลอาจมีรายละเอียดบางอย่างต่างไปจากรูปแบบมาตรฐาน และบางฐานข้อมูลไม่มีคำสั่ง TRUNCATE เช่น ใน DB2 จะใช้คำสั่ง IMPORT statement แทนโดยขึ้นอยู่กับชนิดระบบปฏิบัติการ

ตัวอย่างคำสั่ง

On unix-like systems:                                                                                                     IMPORT FROM /dev/null OF DEL REPLACE INTO tablename

On Windows:                                                                                                                 IMPORT FROM NUL OF DEL REPLACE INTO tablename

12. Command line operations

มีรูปแบบการเขียน และชื่อคำสั่งที่แตกต่างกันออกไป เช่น ตัวอย่างในการดึงรายชื่อฐานข้อมูล

ตัวอย่างคำสั่ง ฐานข้อมูล MSSQL:
EXEC SP_HELPDB

ตัวอย่างคำสั่ง ฐานข้อมูล MySQL:
SHOW DATABASES

การใช้ภาษาไทย UTF-8 กับ Database MySQL

Posted by admin | Posted in Database | Posted on 09-07-2009

0

การใช้ภาษาไทย UTF-8 กับ Database MySQL

การใช้ UTF-8 ในส่วนของ Collection นั้นในส่วนของฐานข้อมูล การสร้างตารางหรือแม้แต่ฟิวส์ให้ใช้เป็น UTF-8 และในการ Import หรือ Export ข้อมูลก็จะต้องใช้เป็น UTF-8 เช่นเดียวกันครับ ตามรูปตัวอย่างครับ

การกำหนด Collation ของตาราง

utf8-1

การกำหนด Collation ของฟิวส์

utf8-2

การกำหนด Collation ในส่วนของการ Import หรือ Export

utf8-4

หลังจากกำหนด Database ให้เป็น UTF-8 แล้ว ก็ต้องกำหนด Header ในเว็บไซต์ให้ใช้เป็น UTF-8 ด้วย

การกำหนดในส่วนของการ Connection Database

$myConnect = mysql_connect(“localhost”,”root”,”password”) or die(“Error Connect to Database”);
$myDB = mysql_select_db(“database_name”);
mysql_query(“SET NAMES UTF8″);



Advertise Here