Skip to content

PlusMagi's Blog By Pitt Phunsanit

Plus emotional magic to the knowledge of logic.

  • About’s Pitt
Close Button

Database: ดีกว่าเก็บเป็นไฟล์เยอะ โชคดีของสมัยนี้Database: ดีกว่าเก็บเป็นไฟล์เยอะ โชคดีของสมัยนี้

2025-08-232025-08-23| phunsanitphunsanit| 0 Comment | 07:00

ถ้าเด็กสมัยนี้มาอ่านก็จะบอกว่า database เกือบทั้งหมดมันก็เก็บลงเป็นไฟล์นั้นละ ยกเว้นแรมเหลือเฟือไปสั่งให้ใช้ RAM เก็บข้อมูล แต่ที่จะบอกคือในสมัยก่อน ๆ ที่จะมีดาต้าเบสให้ให้พรี ๆ ง่าย ๆ กันแบบนี้ สมัยก่อนเค้าเก็บข้อมูลกันแบบ Plain text เก็บข้อมูลใน ไฟล์ .txt แล้วเขียน code มาอ่านตัวอักษรที่ เท่าไหร่ ถึงตัวที่เท่าไหร่แบบนี้ เวลาจะโอนยอดธนาคารเยอะ ๆ ต้องไปติดต่อ bank ว่าถ้าจะทำ batch transfer โอนที่ละมาก ๆ มีเอกสารรับรอง รู้จักผู้จัดการสาขา เค้าถึงจะให้ Format มาให้ ที่สำคัญคือแต่ละธนาคารจะมี “ฟอร์แมต” ของตัวเอง


เรียกว่าอะไร ?

ในทางเทคนิคเรามักเรียกรูปแบบการเก็บและอ่านข้อมูลแบบนี้ว่า

  • Fixed-width Text File: คือไฟล์ที่กำหนดไว้ชัดเจนว่า ข้อมูลชุดที่ 1 อยู่ที่ตัวอักษรที่ 1-10, ชุดที่ 2 อยู่ที่ 11-20 เป็นต้น
  • Byte Offset / Seeking: คือการใช้คำสั่ง (เช่น fseek ใน C หรือ seek () ใน Python) เพื่อกระโดดข้ามตัวอักษรไปยังตำแหน่ง (Offset) ที่เราต้องการอ่านทันทีโดยไม่ต้องไล่จากบรรทัดแรก

นิยมใช้ตอนไหน ?

แม้ปัจจุบันเราจะนิยมใช้ JSON หรือ CSV มากกว่า แต่เทคนิคการระบุตำแหน่งตัวอักษรยังจำเป็นมากในกรณีต่อไปนี้

  • Legacy Systems (ระบบธนาคาร / ประกัน) : ระบบ Mainframe สมัยก่อนมักส่งข้อมูลเป็นเส้นยาว ๆ (Flat File) โดยไม่มีตัวคั่น (Delimiter) แต่ใช้การนับจำนวนตัวอักษรแทน เพราะประหยัดพื้นที่และประมวลผลเร็ว
  • ไฟล์ที่มีขนาดใหญ่ยักษ์ (Large Data Sets) : ถ้าไฟล์มีขนาดหลาย GB การจะอ่านตั้งแต่ต้นจนจบเพื่อหาข้อมูลบรรทัดสุดท้ายจะช้ามาก การ “Seek” ไปยังตำแหน่งที่ต้องการโดยตรงจะทำได้ทันที (O (1) complexity)
  • Binary Files: การอ่านไฟล์ภาพ, วิดีโอ หรือไฟล์ระบบ (เช่น Header ของไฟล์ .exe) จะต้องระบุตำแหน่ง Byte ที่แน่นอนเพื่อดึงข้อมูล Metadata ออกมา
  • Database Engine: เบื้องหลังของฐานข้อมูล (SQL / NoSQL) ใช้เทคนิคนี้ในการเก็บ Data Page เพื่อให้หาข้อมูลเจอได้อย่างรวดเร็ว สรุปคือ ยังใช้วิธีนี้หาข้อมูลกันซินะ แค่ไม่รู้ตัว
  • ระบบ IOT อย่างเครื่องสแกนนิ้ว ที่มี cpu , mem ไม่มาก ตัวอย่างที่เจอล่าสุดคือเครื่อง อ่านบัตรประชาชนจาก chip รู้หมดตั้งแต่ที่อยู่ รูปถ่าย เอาจริง ๆ ถ้าคิดว่าถ้าอ่าน low level มันมีอะไรมากกว่าที่เห็นหน้าบัตรนะ

ตัวอย่างการเขียน Code (Python)

สมมติเรามีไฟล์ data.txt ที่เก็บรหัสพนักงาน (5 หลัก) ตามด้วยชื่อ (10 หลัก) : 00001Somchai 00002Wichai

with open ("data.txt", "rb") as f: # สมมติอยากอ่านชื่อคนที่ 2 (เริ่มที่ตัวอักษรที่ 20) f.seek (20) name = f.read (10) # อ่านต่อไปอีก 10 ตัวอักษร print (name.decode () .strip ()) 

ข้อควรระวัง

  • ถ้าเว้นไม่พอ อย่างหัวหน้าเก่าผม นามสกุล … ณ​ อยุธยา หรือคนดัง ๆ ก็อย่าง อชิตะ ปราโมช ณ อยุธยา ก็เกิน 10 ตัวอักษรไปแล้ว
    • เว้นน้อยไปก็ไม่พอ
    • มากไปก็เปลืองพื้นที่ ยิ่งในสมัยนั้นเค้าใช้ floppy disk 5.25 นิ้ว (High Density – HD) : 1.2 MB เดี่ยวนี้รูปถ่ายใบเดียวก็ใส่มันไม่พอแล้ว
  • การลงโปรแกรมใหม่หรือย้ายระบบอาจทำให้ Config หาย การจัดการไฟล์ข้อมูลดิบแบบนี้ก็เช่นกันครับ หากมีการเปลี่ยน Encoding (เช่นจาก ASCII เป็น UTF-8) ตำแหน่งตัวอักษร (Offset) อาจจะเพี้ยนได้ ทำให้ Code อ่านค่าผิดพลาด

  • Big Data
  • CSV (Comma-Separated Values)
  • Database
Read MoreRead More

Posts pagination

ก่อนหน้า 1 … 64 65 66 … 989 ถัดไป

Projects

  • Statement Columns Mapping Helper
  • PlusMagi Site Search
  • jQuery Plus Repeater

Recent Posts

  • Tabulator: TabulatorPlus (Wrapper Class )
  • AI:thClaws
  • Laravel: php artisan tinker
  • Line: API มันทำอะไรได้บ้าง
  • Laravel: reset password

Archives

Categories

  • AI (10)
  • Businesses (4)
  • Design (38)
    • UX/UI (7)
  • DevOps (55)
    • CI/CD (2)
    • Docker (29)
    • GIT (25)
  • Histories (10)
  • Life (79)
    • Books (28)
    • Tips and Tricks (19)
    • พุทธ (5)
  • Network (117)
    • Apache HTTP Server (14)
    • IOT (1)
    • Nginx (28)
    • Stalwart (5)
  • Operating Systems (246)
    • Unix-like (175)
      • Android (14)
      • iPhone (6)
      • Linux (108)
      • macOS (87)
        • Homebrew (15)
        • OrbStack (10)
      • Oh My ZSH (4)
      • Shell Script (32)
      • SSH (11)
    • Windows (112)
      • PowerShell (23)
      • WSL (24)
  • Programming (658)
    • .NET (18)
      • .NET Core EF (5)
      • C# (17)
    • API (21)
      • REST (5)
      • Swagger (6)
    • Database (175)
      • DBeaver (3)
      • MariaDB (28)
      • MySql (66)
      • Oracle Database (6)
        • 10g (3)
      • PostgreSQL (7)
      • RDBMS (2)
      • SQL Server (85)
        • SSMS (8)
        • T-SQL (26)
      • SQLite (1)
    • PowerBuilder (10)
    • Python (1)
    • Rust (1)
    • System Analyst (SA) (3)
    • Testing (11)
      • Automated Testing (3)
        • Playwright (2)
    • UML (2)
    • Web (349)
      • Backend (222)
        • Golang (1)
        • Java (45)
          • Spring Boot (14)
        • Node.js (1)
        • PHP (176)
          • Laravel (16)
          • Yii (5)
      • Frontend (124)
        • CSS (17)
          • Tailwind CSS (5)
        • JavaScript (112)
          • Angular (2)
          • jQuery (60)
          • Tabulator (12)
          • Vue.js (4)
      • WordPress (25)
  • Programs (76)
    • Excel (10)
  • Security (48)
  • Uncategorized (1)
  • กฎหมาย (6)

Sirat WordPress Theme By VWThemes

Scroll Up