มีฐานข้อมูลให้เลือกมากมายหลายร้อยตัว แล้วคุณควรใช้ตัวไหนสำหรับแอปพลิเคชันของคุณ? คำตอบสั้นๆ คือ "แล้วแต่สถานการณ์" ส่วนคำตอบยาวๆ ก็คือ…​หนังสือเล่มนี้

เทคโนโลยีที่แตกต่างกันสำหรับการจัดเก็บและประมวลผลข้อมูลต่างก็มี trade-off ที่แตกต่างกันไป และไม่มีแนวทางใดที่ดีที่สุดสำหรับทุกสถานการณ์ ระบบที่เหมาะสมที่สุดสำหรับแอปพลิเคชันหนึ่งอาจไม่เหมาะกับอีกแอปพลิเคชันหนึ่งเลย หนังสือเล่มนี้เป็นคู่มือสำหรับภูมิทัศน์ทั้งหมดของระบบข้อมูล ไม่ใช่แค่ดูผลิตภัณฑ์ตัวใดตัวหนึ่ง แต่เป็นการเปรียบเทียบจุดแข็งและจุดอ่อนของหลายๆ ระบบ

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

ถึงแม้หนังสือเล่มนี้จะไม่ใช่คู่มือการสอนสำหรับเครื่องมือใดเครื่องมือหนึ่งโดยเฉพาะ แต่มันก็ไม่ใช่ตำราเรียนที่เต็มไปด้วยทฤษฎีแห้งๆ เช่นกัน แต่เราจะดูตัวอย่างมากมายของระบบข้อมูลที่ประสบความสำเร็จ: เทคโนโลยีที่เป็นรากฐานของแอปพลิเคชันยอดนิยมมากมาย และต้องตอบสนองความต้องการด้าน scalability, performance, และ reliability ในระบบ production ทุกวัน เราจะเจาะลึกเข้าไปในภายในของระบบเหล่านั้น แยกแยะ algorithms หลักๆ และพูดถึง trade-off ที่พวกเขาเลือกใช้ ในการเดินทางครั้งนี้ เราจะพยายามหาแนวทางที่มีประโยชน์ในการ คิดเกี่ยวกับ ระบบข้อมูล—ไม่ใช่แค่ อย่างไร ที่มันทำงาน แต่รวมถึง ทำไม มันถึงทำงานแบบนั้น

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

ปรัชญานำทางของหนังสือเล่มนี้คือการรวบรวมมุมมองที่หลากหลาย: ทั้งทางทฤษฎีและปฏิบัติ ทั้งแนวคิดใหม่และเก่า อุตสาหกรรมคอมพิวเตอร์มักจะดึงดูดกับสิ่งที่ใหม่และดูเงางาม และมองข้ามแนวคิดที่ถูกมองว่าเก่าหรือเป็นวิชาการ นั่นเป็นความผิดพลาด; แนวคิดพื้นฐานที่ทรงพลังมากมายในคอมพิวเตอร์เกิดขึ้นจากงานวิจัย บ้างก็เพิ่งเกิดไม่นาน บ้างก็เก่าหลายทศวรรษ ในทางกลับกัน ในแวดวงวิชาการบางครั้งก็ขาดความเข้าใจที่ชัดเจนว่าประเด็นไหนสำคัญในทางปฏิบัติ หนังสือเล่มนี้รวมจุดที่ดีที่สุดของทั้งสองด้าน: ความแม่นยำทางวิชาการและความใส่ใจในรายละเอียด ควบคู่กับการเน้นความใช้ได้จริงแบบภาคอุตสาหกรรม

Who Should Read This Book? (ใครควรอ่านหนังสือเล่มนี้)

หากข้อใดข้อหนึ่งต่อไปนี้เป็นจริงสำหรับคุณ คุณจะพบว่าหนังสือเล่มนี้มีคุณค่า:

  • คุณเป็น software engineer, software architect, หรือ technical manager ที่ต้องตัดสินใจเกี่ยวกับสถาปัตยกรรมของระบบที่คุณทำงาน—เช่น คุณต้องเลือกเครื่องมือสำหรับแก้ปัญหาที่กำหนด และหาวิธีที่ดีที่สุดในการนำไปใช้ กรณีนี้ใช้กับระบบ backend เป็นพิเศษ

  • คุณเป็น data engineer ที่ต้องการเข้าใจบริบทที่กว้างขึ้นของระบบที่คุณจัดการ หรือเป็น cloud engineer ที่ต้องการ insight เกี่ยวกับพื้นฐานของระบบที่คุณกำลังใช้อยู่ คุณจะพบว่าแม้ระบบ distributed สมัยใหม่จะซ่อนความซับซ้อนไว้มากมายจากคุณ แต่การเข้าใจหลักการพื้นฐานของมันนั้นมีประโยชน์อย่างยิ่งสำหรับ performance optimization และการ debug

  • คุณต้องการเรียนรู้วิธีทำให้ระบบข้อมูล scalable (เช่น รองรับแอปพลิเคชันที่มีผู้ใช้หลายล้านคน), highly available (ลด downtime), ดูแลระบบได้อย่างมั่นคง (operationally robust) และบำรุงรักษาง่ายในระยะยาว (แม้ว่าระบบจะเติบโตและ requirements หรือเทคโนโลยีจะเปลี่ยนแปลงไป)

  • คุณกำลังเตรียมตัวสำหรับการสัมภาษณ์งาน "system design" ที่คุณจะถูกขอให้ร่างสถาปัตยกรรมสำหรับแอปพลิเคชัน และคุณจำเป็นต้องเรียนรู้หลักการสำหรับสถาปัตยกรรมข้อมูลที่ดี

  • คุณอยากรู้ว่ามีอะไรเกิดขึ้นเบื้องหลังเว็บไซต์และบริการออนไลน์รายใหญ่ๆ รวมถึงภายในฐานข้อมูลและระบบประมวลผลข้อมูลต่างๆ—โดยเฉพาะถ้าคุณชอบที่จะเจาะลึกมากกว่าแค่ buzzword เพื่อให้ได้ความเข้าใจที่ถูกต้องทางเทคนิคและแม่นยำเกี่ยวกับเทคโนโลยีต่างๆ และ trade-off ของพวกมัน

หนังสือเล่มนี้สมมติว่าคุณมีประสบการณ์สร้าง web application มาบ้างแล้ว และคุ้นเคยกับ relational database และ SQL ความเข้าใจระดับสูงเกี่ยวกับ network protocols ทั่วไปอย่าง TCP และ HTTP ก็มีประโยชน์เช่นกัน ภาษาโปรแกรมหรือ framework ที่คุณเลือกใช้ไม่มีผลกับการอ่านหนังสือเล่มนี้

What's New in the Second Edition? (มีอะไรใหม่ในฉบับพิมพ์ครั้งที่สอง)

ฉบับพิมพ์ครั้งที่สองนี้มีเป้าหมายและขอบเขตเดียวกันกับฉบับพิมพ์ครั้งแรกของ Designing Data-Intensive Applications ซึ่งตีพิมพ์ในปี 2017 อย่างไรก็ตาม เราได้ปรับปรุงทั้งเล่มอย่างละเอียดเพื่อสะท้อนการเปลี่ยนแปลงทางเทคโนโลยีที่เกิดขึ้นในทศวรรษที่ผ่านมา และเพื่อปรับปรุงความชัดเจนของคำอธิบาย

การเปลี่ยนแปลงทางเทคนิคที่ใหญ่ที่สุดที่ส่งผลต่อหนังสือเล่มนี้ตั้งแต่ฉบับพิมพ์ครั้งแรกคือความสนใจใน AI ที่พุ่งสูงขึ้นอย่างมาก และการเติบโตของสถาปัตยกรรมระบบข้อมูลแบบ cloud native แม้ว่าหนังสือเล่มนี้จะไม่ได้เกี่ยวกับ AI โดยตรง แต่เราได้เพิ่มเนื้อหาเกี่ยวกับระบบข้อมูลที่รองรับ AI และ machine learning รวมถึง vector indexes (ใช้สำหรับ semantic search), DataFrames (ใช้สำหรับ training datasets), และระบบ batch processing สำหรับเตรียมข้อมูลฝึกสอนปริมาณมาก แนวคิด cloud native เช่น การสร้างระบบข้อมูลบน object stores แทนที่จะเป็น local disks ถูกแทรกอยู่ตลอดทั้งเล่ม

เรายังเพิ่มเนื้อหาเรื่อง sync engines และ local-first software, workflow engines และ durable execution, formal methods และ randomized testing, GraphQL, และเทคโนโลยีอื่นๆ อีกมากมายที่ควรรู้ เราได้รวมบริบททางกฎหมายไว้บ้างเช่นกัน โดยการสำรวจผลกระทบของ EU General Data Protection Regulation (GDPR) และกฎหมายที่เกี่ยวข้อง เรายังได้ตัดบางสิ่งออกไป—เช่น เนื่องจาก MapReduce ตอนนี้ล้าสมัยเป็นส่วนใหญ่ เราจึงได้เขียนบท batch processing ใหม่ตามนั้น และเราก็ตัดสินใจอย่างเสียดายที่จะเอาแผนที่สไตล์ Tolkien ออก

การอภิปรายบางส่วนได้รับการจัดโครงสร้างใหม่ และเลขบทมีการเปลี่ยนแปลง บางบทต้องการแค่การแก้ไขเล็กน้อย ในขณะที่บางบท (เช่น Chapter 10 เรื่อง consistency และ consensus) ถูกเขียนใหม่เกือบทั้งหมดเพื่อให้ชัดเจนยิ่งขึ้น โดยรวมแล้ว ฉบับพิมพ์ครั้งที่สองยาวกว่าฉบับแรกประมาณ 60 หน้า

References and Further Reading (ข้อมูลอ้างอิงและการอ่านเพิ่มเติม)

สิ่งที่เราพูดถึงในหนังสือเล่มนี้ส่วนใหญ่เคยถูกกล่าวถึงในรูปแบบใดรูปแบบหนึ่งมาก่อนแล้ว—ไม่ว่าจะเป็นใน conference presentations, research papers, blog posts, code, bug trackers, mailing lists, หรือ engineering folklore หนังสือเล่มนี้สรุปแนวคิดที่สำคัญที่สุดจากหลายแหล่ง และรวมถึงตัวชี้ไปยังงานต้นฉบับตลอดทั้งเล่ม ข้อมูลอ้างอิงที่ท้ายแต่ละบทเป็นแหล่งข้อมูลที่ดีเยี่ยมหากคุณต้องการสำรวจหัวข้อใดในเชิงลึก และส่วนใหญ่สามารถเข้าถึงได้ฟรีทางออนไลน์

ในฉบับ ebook เราใส่ลิงก์ไปยังข้อความเต็มของแหล่งข้อมูลออนไลน์ไว้ให้ และเนื่องจากลิงก์บนเว็บมักเสียบ่อย เราจึงใส่ลิงก์ archive ไว้ด้วยเมื่อทำได้ หากคุณเจอลิงก์เสีย หรือหากคุณกำลังอ่านหนังสือฉบับพิมพ์ คุณสามารถใช้ search engine เพื่อค้นหาข้อมูลอ้างอิง สำหรับ academic papers ให้ค้นหาชื่อเรื่องใน Google Scholar เพื่อหาไฟล์ PDF ที่เปิดให้เข้าถึงฟรี หนังสืออาจต้องเสียเงิน แต่คุณไม่ควรต้องจ่ายเงินเพื่ออ่าน research papers

หรืออีกทางหนึ่ง คุณสามารถค้นหาข้อมูลอ้างอิงทั้งหมดได้ที่ https://github.com/ept/ddia2-references ซึ่งเราดูแลรักษาลิงก์ให้เป็นปัจจุบัน

Conventions Used in This Book (รูปแบบที่ใช้ในหนังสือเล่มนี้)

รูปแบบตัวอักษรต่อไปนี้ถูกใช้ในหนังสือเล่มนี้:

Italic

ใช้ระบุคำศัพท์ใหม่, URLs, ที่อยู่อีเมล, ชื่อไฟล์, และนามสกุลไฟล์

Constant width

ใช้สำหรับprogram listing รวมถึงภายในย่อหน้าเพื่ออ้างถึงองค์ประกอบของโปรแกรม เช่น ชื่อตัวแปรหรือฟังก์ชัน, databases, datatypes, environment variables, statements, และ keywords

Constant width bold

แสดงคำสั่งหรือข้อความอื่นที่ผู้ใช้ควรพิมพ์ตามตัวอักษร

Constant width italic

แสดงข้อความที่ควรถูกแทนที่ด้วยค่าที่ผู้ใช้กำหนดหรือค่าที่กำหนดโดยบริบท

Note (หมายเหตุ)

องค์ประกอบนี้หมายถึงข้อความ note ทั่วไป

Warning (คำเตือน)

องค์ประกอบนี้บ่งชี้ถึง warning หรือ caution

O'Reilly Online Learning (การเรียนรู้ออนไลน์ของ O'Reilly)

Note (หมายเหตุ)

กว่า 40 ปีที่ผ่านมา O'Reilly Media ได้ให้การฝึกอบรมด้านเทคโนโลยีและธุรกิจ รวมถึงความรู้และ insight เพื่อช่วยให้บริษัทต่างๆ ประสบความสำเร็จ

เครือข่ายผู้เชี่ยวชาญและนวัตกรที่ไม่เหมือนใครของเราแบ่งปันความรู้และความเชี่ยวชาญผ่านหนังสือ, บทความ, และแพลตฟอร์มการเรียนรู้ออนไลน์ของเรา แพลตฟอร์มการเรียนรู้ออนไลน์ของ O'Reilly มอบการเข้าถึง live training courses, in-depth learning paths, interactive coding environments, และคอลเลกชันข้อความและวิดีโอมากมายจาก O'Reilly และสำนักพิมพ์อื่นอีก 200+ ราย สำหรับข้อมูลเพิ่มเติม ไปที่ https://oreilly.com .

How to Contact Us (วิธีติดต่อเรา)

กรุณาส่งข้อคิดเห็นและคำถามเกี่ยวกับหนังสือเล่มนี้ไปยังสำนักพิมพ์:

  • O'Reilly Media, Inc.
  • 141 Stony Circle, Suite 195
  • Santa Rosa, CA 95401
  • 800-889-8969 (ในสหรัฐอเมริกาหรือแคนาดา)
  • 707-827-7019 (ต่างประเทศหรือท้องถิ่น)
  • 707-829-0104 (แฟกซ์)
  • [email protected]
  • https://oreilly.com/about/contact.html

เรามีหน้าเว็บสำหรับหนังสือเล่มนี้ ซึ่งเราจะระบุ errata, ตัวอย่าง, และข้อมูลเพิ่มเติมใดๆ คุณสามารถเข้าถึงหน้านี้ได้ที่ https://oreil.ly/DesigningDataIntensiveApps2 .

สำหรับข่าวสารและข้อมูลเกี่ยวกับหนังสือและคอร์สของเรา โปรดไปที่ https://oreilly.com .

ค้นหาเราบน LinkedIn: https://linkedin.com/company/oreilly .

รับชมเราบน YouTube: https://youtube.com/oreillymedia .

Acknowledgments (กิตติกรรมประกาศ)

หนังสือเล่มนี้รวบรวมและจัดระบบความรู้และแนวคิดจากผู้คนจำนวนมหาศาล ประกอบด้วยข้อมูลอ้างอิงประมาณพันรายการไปยังบทความ, blog posts, talks, เอกสาร และอื่นๆ อีกมากมาย และเรารู้สึกขอบคุณอย่างยิ่งต่อผู้เขียนเนื้อหาเหล่านี้ที่ได้แบ่งปันความรู้ของพวกเขา

สำหรับฉบับพิมพ์ครั้งที่สอง Chris Riccomini ได้ร่วมเป็น coauthor กับ Martin Kleppmann เราอยากจะขอบคุณทุกคนที่ให้ feedback และ input ที่ทำให้หนังสือเล่มนี้ดีขึ้น: โดยเฉพาะ David Booth, Mark Callaghan, Chuck Carman, Aniruddh Chaturvedi, William Dealtry, Arbel Deutsch Peled, Phil Eaton, Joy Gao, Johannes Hauser, Matthew Hertz, Erin R. Hoffman, Matt Housley, Karan Johar, Ling Mao, Pedram Navid, Mohit Palriwal, Alex Petrov, Alex Power, Joe Reis, Jack Vanlightly, Will Wilson, Jacky Zhao, และ Zhengliang Zhu แน่นอนว่าเราขอรับผิดชอบทั้งหมดต่อข้อผิดพลาดหรือความเห็นที่อาจไม่ถูกใจใครที่อาจเหลืออยู่ในหนังสือเล่มนี้

ในระหว่างที่เขียนฉบับพิมพ์ครั้งแรก Martin Kleppmann ได้รับประโยชน์จากผู้คนจำนวนมากที่สละเวลามาพูดคุยแนวคิดหรืออธิบายสิ่งต่างๆ ให้เขาอย่างอดทน เขาอยากจะขอบคุณ Joe Adler, Ross Anderson, Peter Bailis, Márton Balassi, Alastair Beresford, Mark Callaghan, Mat Clayton, Patrick Collison, Sean Cribbs, Shirshanka Das, Niklas Ekström, Stephan Ewen, Alan Fekete, Gyula Fóra, Camille Fournier, Andres Freund, John Garbutt, Seth Gilbert, Tom Haggett, Pat Helland, Joe Hellerstein, Jakob Homan, Heidi Howard, John Hugg, Julian Hyde, Conrad Irwin, Evan Jones, Flavio Junqueira, Jessica Kerr, Kyle Kingsbury, Jay Kreps, Carl Lerche, Nicolas Liochon, Steve Loughran, Lee Mallabone, Nathan Marz, Caitie McCaffrey, Josie McLellan, Christopher Meiklejohn, Ian Meyers, Neha Narkhede, Neha Narula, Cathy O'Neil, Onora O'Neill, Ludovic Orban, Zoran Perkov, Julia Powles, Chris Riccomini, Henry Robinson, David Rosenthal, Jennifer Rullmann, Matthew Sackman, Martin Scholl, Amit Sela, Gwen Shapira, Greg Spurrier, Sam Stokes, Ben Stopford, Tom Stuart, Diana Vasile, Rahul Vohra, Pete Warden, และ Brett Wooldridge

นอกจากนี้ยังมีอีกหลายคนที่ให้ feedback อันมีค่าต่อ drafts ของฉบับพิมพ์ครั้งแรก: โดยเฉพาะ Raul Agepati, Tyler Akidau, Mattias Andersson, Sasha Baranov, Veena Basavaraj, David Beyer, Jim Brikman, Paul Carey, Raul Castro Fernandez, Joseph Chow, Derek Elkins, Sam Elliott, Alexander Gallego, Mark Grover, Stu Halloway, Heidi Howard, Nicola Kleppmann, Stefan Kruppa, Bjorn Madsen, Sander Mak, Stefan Podkowinski, Phil Potter, Hamid Ramazani, Sam Stokes, และ Ben Summers

Martin Kleppmann ยังรู้สึกขอบคุณสำหรับการสนับสนุนทางการเงินที่เขาได้รับระหว่างการเขียนหนังสือเล่มนี้ ในระหว่างที่ทำงานในฉบับพิมพ์ครั้งแรก เขาได้รับเวลาจ่ายเงินเพื่อทำงานในหนังสือจาก LinkedIn และต่อมาเขาได้รับการสนับสนุนจาก grant ของ The Boeing Company ในระหว่างการเขียนฉบับพิมพ์ครั้งที่สอง เขาได้รับการสนับสนุนจาก Freigeist Fellowship ของ Volkswagen Foundation, จากผู้สนับสนุน crowdfunding รวมถึง Ably, Mintter, Prisma, และ SoftwareMill และจากการ sponsorship จาก ScyllaDB

เราอยากจะขอบคุณทีมงานที่ O'Reilly ที่ช่วยทำให้หนังสือเล่มนี้เป็นจริง และเพื่อนร่วมงานและครอบครัวของเราที่อดทนต่อเวลาอันมหาศาลที่เราทุ่มเทให้กับการเขียน เราหวังว่าคุณจะพบว่ามันคุ้มค่า