SQLite

SQLite โครงการฐานข้อมูล SQL ขนาดเล็กออกเวอร์ชั่น 3.45.0 เวอร์ชั่นแรกของปีนี้ โดยมีความเปลี่ยนแปลงสำคัญคือการเปลี่ยนโครงสร้างข้อมูลของฟิลด์แบบ JSON ให้เป็นไบนารี JSONB เพื่อเร่งประสิทธิภาพการทำงาน

การเปลี่ยนแปลงครั้งนี้ทำให้การประมวลผล JSON ทำได้เร็วขึ้นเพราะไม่ต้อง parse ข้อมูลจากข้อความโดยตรงทุกรอบที่ต้องการประมวลผลอีกต่อไป การทำงานยังคงแทบเหมือนเดิม โดยฟังก์ชั่นใน SQL ทั้งหมดที่เคยรองรับ JSON เดิมจะรองรับ JSONB ด้วย และแทบทุกฟังก์ชั่นที่คืนค่าเป็น JSON จะมีฟังก์ชั่นเทียบเคียงกันแต่คืนค่าเป็น JSONB

JSONB เป็นชื่อประเภทข้อมูลที่เริ่มใช้งานโดย PostgreSQL เพื่อเร่งความเร็วการประมวลผล JSON อย่างไรก็ดี SQLite นั้นไม่ได้ใช้โค้ดของ PostgreSQL แต่เขียนขึ้นใหม่เอง และมีความแตกต่างกันพอสมควร การประมวลผลบางอย่างมี big-O ไม่เท่ากัน

ตัวฟิลด์ JSONB นั้นเป็น BLOB ธรรมดา และผู้ใช้สามารถแก้ไขไบนารีได้โดยตรง แต่ทางโครงการเตือนว่าการแก้ไขจน JSONB ผิดรูปแบบ (malformed) อาจจะทำให้ผลลัพธ์คาดเดาไม่ได้ บางทีอาจจะคืนค่าถูก บางทีอาจจะคืนค่า error ว่าอ่านไม่ได้ รวมถึงแต่ละเวอร์ชั่นก็จะไม่รับประกันว่าจะได้ค่าเหมือนเดิม

ที่มา - SQLite

Hiring! บริษัทที่น่าสนใจ

Carmen Software company cover
Carmen Software
Hotel Financial Solutions
Next Innovation (Thailand) Co., Ltd. company cover
Next Innovation (Thailand) Co., Ltd.
We are web design with consulting & engineering services driven the future stronger and flexibility.
KKP Dime company cover
KKP Dime
KKP Dime บริษัทในเครือเกียรตินาคินภัทร
Kiatnakin Phatra Financial Group company cover
Kiatnakin Phatra Financial Group
Financial Service
Fastwork Technologies company cover
Fastwork Technologies
Fastwork.co เว็บไซต์ที่รวบรวม ฟรีแลนซ์ มืออาชีพจากหลากหลายสายงานไว้ในที่เดียวกัน
Thoughtworks Thailand company cover
Thoughtworks Thailand
Thoughtworks เป็นบริษัทที่ปรึกษาด้านเทคโนโยลีระดับโลกที่คว้า Great Place to Work 3 ปีซ้อน
Iron Software company cover
Iron Software
Iron Software is an American company providing a suite of .NET libraries by engineer for engineers.
CLEVERSE company cover
CLEVERSE
Cleverse is a Venture Builder. Our team builds several tech companies.
Nipa Cloud company cover
Nipa Cloud
#1 OpenStack cloud provider in Thailand with our own data center and software platform.
Bangmod Enterprise company cover
Bangmod Enterprise
The leader in Cloud Server and Hosting in Thailand.
CIMB THAI Bank company cover
CIMB THAI Bank
MOVING FORWARD WITH YOU - CIMB is the leading ASEAN Bank
Bangkok Bank company cover
Bangkok Bank
Bangkok Bank is one of Southeast Asia's largest regional banks, a market leader in business banking
MuvMi (Urban Mobility Tech Co.,Ltd.) company cover
MuvMi (Urban Mobility Tech Co.,Ltd.)
Shape the future of urban mobility towards affordable, clean, and safe solutions
T.N. Digital Solution Co., Ltd. company cover
T.N. Digital Solution Co., Ltd.
TNDS has been involving in every first move of banking’s major digital transformation.
KBTG - KASIKORN Business-Technology Group company cover
KBTG - KASIKORN Business-Technology Group
KBTG - "The Technology Company for Digital Business Innovation"
Siam Commercial Bank Public Company Limited company cover
Siam Commercial Bank Public Company Limited
"Let's start a brighter career future together"
Icon Framework co.,Ltd. company cover
Icon Framework co.,Ltd.
Global Standard Platform for Real Estate แพลตฟอร์มสำหรับธุรกิจอสังหาริมทรัพย์ครบวงจร มาตรฐานระดับโลก
REFINITIV company cover
REFINITIV
The Financial and Risk business of Thomson Reuters is now Refinitiv
H LAB company cover
H LAB
Re-engineering healthcare systems through intelligent platforms and system design.
The Gang Technology Co., Ltd. company cover
The Gang Technology Co., Ltd.
We're a Digital Agency that helps our customers transform their business into digital with ease.
LTMH company cover
LTMH
LTMH มุ่งเน้นการพัฒนาผลิตภัณฑ์ที่สามารถช่วยพันธมิตรของเราให้บรรลุเป้าหมาย
Seven Peaks company cover
Seven Peaks
We Drive Digital Transformation
Wisesight (Thailand) Co., Ltd. company cover
Wisesight (Thailand) Co., Ltd.
The Best Choice For Handling Social Media · High Expertise in Social Data · Most Advanced and Secure
MOLOG Tech company cover
MOLOG Tech
We are Modern Logistic Platform, Specialize in WMS, OMS and TMS.
Data Wow Co.,Ltd company cover
Data Wow Co.,Ltd
We enable our clients to realize increased productivity by solving their most complex issues by Data
LINE Company Thailand company cover
LINE Company Thailand
LINE, the world's hottest mobile messaging platform, offers free text and voice messaging + Call
LINE MAN Wongnai company cover
LINE MAN Wongnai
Join our journey to becoming No.1 food platform in Thailand

คนออกแบบ database สมัยใหม่ เริ่มจะลืม normalization N1 N2 N3 หมดแล้ว
จะใช้ field type เป็น json ลูกเดียว พอต้องแก้ schema ทีนี้อย่างเหนื่อย

ผมเห็นด้วยว่า normal forms เป็นเรื่องสำคัญนะครับ แต่สงสัยว่าทำไมเวลาแก้ schema และใช้ json แล้วเหนื่อย

เวลาแก้โครงสร้างไม่ได้สั่ง update ธรรมดาหรือครับ ? หรือว่า record เยอะก็เลยเหนื่อย ? หรือว่าเขียน schema ไว้ด้วยภาษาอื่นแล้วต้องมาแปลงเป็น SQL update ก็เลยเหนื่อย ?

ผมว่าเขาน่าจะหมายถึงวิธีการจัดเก็บข้อมูล บางคนเล่นเก็บแบบ JSON ล้วน ไม่ใช้ความสามารถของ Database กันเลย องค์ความรู้เดิมเกี่ยวกับ Relational Database เลยหายไป และความบรรลัยบังเกิดเมื่อฐานข้อมูลสเกลขึ้นแล้วต้องแยกข้อมูลออกจาก JSON

พอผมมองอีกที ถ้าใช้แต่ JSON ทำไมคนพวกนั้นเขาไม่ใช้ MongoDB หรือพวก Document Database กันไปเลยนะ

พอผมมองอีกที ถ้าใช้แต่ JSON ทำไมคนพวกนั้นเขาไม่ใช้ MongoDB หรือพวก Document Database กันไปเลยนะ

MongoDB เคยพบว่าเปลี่ยน version แล้ว query เก่าใช้ไม่ได้ กอปรกับมีประเด็นเรื่อง license นอกจากนั้นหลายกรณี SQLite ตัดตั้งสะดวกกว่ามากครับ

จริง ๆ มี ferretdb ที่เป็น proxy ให้ PostgreSQL กับ SQLite ใช้ wire protocol ได้ แต่ไม่แน่ใจว่ามันพร้อมใช้งานขนาดไหน

ผมไม่เคยใช้ของ MongoDB เลยไม่รู้ว่าความเป็นมาเป็นอย่างไร แต่โดยปกติแล้วไม่ว่าซอฟต์แวร์อะไรก็ไม่ควรอัปเกรดข้าม Major Version เพราะทุกอย่างจะเปลี่ยนตามหลักการ SemVer ต้องมาเช็กทุกอย่างว่ามีอะไรเปลี่ยนไปบ้าง ยกเว้นว่าเจ้านั้นมีเครื่องมือช่วย Migrate ที่ดี ซึ่งก็น้อยเจ้าที่ทำ

ไม่ว่าซอฟต์แวร์อะไรก็ไม่ควรอัปเกรดข้าม Major Version

ถูกครับ แต่ไม่ควรใช้ซอฟต์แวร์ที่ end of life ด้วยและ MongoDB 2.X หมดอายุไปตั้งแต่ค.ศ. 2018

ต้องมาเช็กทุกอย่างว่ามีอะไรเปลี่ยนไปบ้าง

PostgreSQL ทำได้ดีหรืออย่างอย่างน้อยก็พอใช้ได้ครับ ทั้งเอกสารและ migration tool ภาษา SQL เองส่วนมากก็ backward compatible ด้วยครับ

รวบเม้นทั้งสองท่านมาตอบตรงนี้ หลักการ SemVer มันยังทำงานเหมือนเดิม เพียงแต่ว่าเจ้าของซอฟต์แวร์เลือกที่จะตามหรือไม่ก็ได้ ซึ่ง MongoDB เห็นได้ชัดเลยว่าไม่ทำตาม (แอบขอบคุณด้วยที่เตือนล่วงหน้า) ส่วนตัวผมก็ไม่เคยใช้ ผมเคยใช้เฉพาะบริการที่ใช้งานง่าย ๆ และ API ไม่ได้เปลี่ยนเยอะ

และในโลกอุดมคติผมก็เห็นด้วยมาก ๆ เคยไปเถียงอยู่รอบหนึ่งกับเกมเอนจิน Open-source บางเจ้าที่พังแม้กระทั่ง Minor Version เป็นประจำ (ให้ทาย) ก็เถียงอยู่นั่นแหละว่าหลักการ SemVer เราจะ Break Compat ยังไงก็ได้ แต่มันก็ควรจะมีแผน Migration ที่ดีก่อนข้ามเวอร์ชันไหม ไม่ใช่อยากจะทำอะไรก็ทำ คิดแล้วก็โมโหขึ้นมา 55555

ตอบในแง่ SemVar โดยรวมๆ ผมมองว่าแนวทาง SemVar นี่หมดความหมายไปเยอะแล้วครับ trend การรักษาความเข้ากันได้ทุกๆ minor แล้วรอ major version ค่อยปล่อยอะไรที่ break backward compatibility นี่มันสร้างปัญหามาก ที่เห็นได้ชัดคือ Python 2 -> 3

ถ้าตามกระแสเราจะเห็นว่าทุกคน "ช่างแม่ง" กับ SemVar กันเยอะแล้ว ด้วยการปล่อยให้ทุก release เป็น major เช่น เลขเวอร์ชั่นเบราว์เซอร์ที่เป็นร้อยแล้ว หรือเวอร์ชั่น nodejs ก็วิ่งเร็วกันสนุกสนานทีเดียว ต่อท้ายด้วย Python ที่เริ่ม break backward ด้วยการถอด standard lib ทิ้ง แม้จะไม่เปลี่ยนเลข major (แต่เอาเข้าจริงมันก็กระทบน้อยมากๆ)

ผมเห็นด้วยนะครับว่าเดี๋ยวนี้การทำ breaking changes ในฝั่ง libs ใน minor release แทบจะเป็นเรื่องปกติไปแล้ว โดยเฉพาะกับตัวที่มีคนใช้น้อยๆ (เพราะคนกลุ่มนี้ ไม่ตามกลับไปอัพเดตกันเท่าไหร่)

เหมือนกับทีมพัฒนา lib เลือกที่จะพัฒนาฟีเจอร์ใหม่ๆแล้วปล่อยเลย (บางทีก็เหมือนกับต้องพัฒนาแข่งกับ lib คู่แข่ง) แทนที่จะรอ major หน้าเพื่อคง backward compatible เอาไว้

ขณะเดียวกัน dev ฝั่ง app ก็เหมือนพยัคหน้ารู้กันแล้วว่าฝั่ง lib มันเปลี่ยนได้ตลอด ถ้าตัวไหนที่ต้องอัพเดทบ่อยๆ อาจจะต้อง design ให้รองรับการอัพเกรดบ่อยๆ

ซึ่ง MongoDB เห็นได้ชัดเลยว่าไม่ทำตาม

ผมไม่แน่ใจว่า MongoDB ทำตาม semvar หรือไม่นะครับ เพราะว่าผมก็อัปข้าม version หลักจริง ๆ ซึ่งจะมี breaking change ผมก็ไม่ได้ตำหนิอะไร แต่พอใช้ไปหลาย ๆ ปีก็มันจะมีความจำเป็นลักษณะนี้ขึ้นมาครับ รวมถึงอัป PHP 5 ไป PHP 8 และอื่น ๆ มากมายครับ

ส่วน PostgreSQL ผมประทับใจเป็นพิเศษครับ ไม่เคยเจอว่าต้องมาแก้ query ส่วน extension จะแก้บ้างก็ไม่ว่ากัน

ที่ผมเจอคือ เวลาจะเพิ่ม/แก้ไข field ใน json schema มันจะต้อง run script/sql update ทุก row
ยิ่งถ้า field ของ json มี relation นี้ยิ่งลำบาก

ถ้าใช้ table primitive data (int, string, date, decimal, ...) field ทั่วไปนี้ง่ายกว่า, เร็วกว่าเยอะ

เวลาผมออกแบบผมคำนึงถึงว่ามันต้องแก้ไขง่ายก่อนอันดับแรก
บางที requirement จาก user ตอนแรก บอกไม่แก้ๆ สุดท้ายก็เปลี่ยนใจแก้อยู่ดี

ยิ่งถ้า field ของ json มี relation นี้ยิ่งลำบาก

ถ้าแบบนี้ แค่ฟังก็เหนื่อยจริง ซึ่งมันไม่ควรจะออกมาท่านี้มั้ยนะ ข้อมูลที่เก็บเป็น JSON ควรจะอัพเดทค่าแบบ 1:1 เท่านั้นนะผมว่า และควรเป็นข้อมูลสำหรับเอกสารนั้นๆ ไม่มีการแก้ไขค่าตามฟังก์ชั่นที่ควบคุมเอกสารหลายๆใบ ถ้าแบบว่าทำ process อะไรบางอย่าง แล้วอัพเดทหลายๆ rows ดูแล้วยังไง JSON ก็ไม่เหมาะ

บ่อยครับ ประชุมตูม... ฟันมาว่าไป NoSQL ซักตัว แต่ไม่รู้ว่าทำไม ? นี่แหละจุดเริ่มต้นแห่งความสนุกได้เริ่มต้นแล้ว

ที่เคยเห็นใช้แล้วจบนะครับ คือ ใช้เป็น บิล หรือ ticket ที่ต้อง insert วันละเยอะ ๆ สำคัญแค่ ช่วงเวลาหนึ่งหลังจากนั้นลง archive แล้ว data ใน rows จะไม่เปลี่ยนเลย ถ้าเปลี่ยนคือ cancel ใบเก่า สร้างใบใหม่

แก้โครงสร้าง JSON (ของทุก Rows)
...
...
อาจจะเป็นไปได้ว่า มี business key นะ แต่ดันอยู่ใน JSON
เจอแบบนี้ ตัวใครตัวมันนะครับ เหอะๆ

btoy Wed, 17/01/2024 - 10:57

ผมเองชอบ PostgreSQL และพอจะเข้าใจว่าทำมันถึงได้รับความนิยม การผสมผสานระหว่างข้อมูลแบบมี schema กับ non-schema ได้ ช่วยลดงานในการอัพเดท data บางอย่างได้เยอะจริงๆ

แต่การออกแบบ Database ก็ยังคิดในรูปแบบที่ว่าข้อมูลหลักๆต้องพยายามให้เป็น SQL ปกติไว้ก่อน