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 | 00: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 … 41 42 43 … 890 ถัดไป

Projects

  • Statement columns mapping Helper
  • Plusmagi Search
  • jQuery Plus Repeater

Recent Posts

  • WordPress: แก้ Double / Triple Escaping
  • MariaDB: Character Set และ Collation
  • WinGet: การติดตั้ง TortoiseSVN
  • laravel: breeze, Jetstream, spatie ต่างกันอย่างไร
  • Bcrypt: Password Hashing

Archives

Categories

  • AI (4)
  • Businesses (3)
  • Design (30)
    • UX/UI (3)
  • Histories (8)
  • Life (47)
    • Books (20)
      • สืบสวน (4)
    • ECO (3)
    • Sci-Fi (2)
    • พุทธ (3)
  • Network (290)
    • Android (13)
      • F-Droid (7)
    • Apache Apache HTTP Server (17)
    • Docker (28)
    • Homebrew (14)
    • IIS (7)
    • IOT (4)
    • Linux (92)
    • macOS (67)
      • OrbStack (10)
    • Nginx (26)
    • RabbitMQ (4)
    • Samba (5)
    • Shell Script (28)
    • SSH (11)
    • Windows (100)
      • PowerShell (21)
      • WinGet (10)
      • WSL (21)
  • Programming (614)
    • API (18)
      • REST (5)
      • Swagger (6)
    • C# (15)
      • .NET Core EF (3)
    • CI/CD (7)
    • Database (164)
      • DBeaver (3)
      • RDBMS (146)
        • DB2 (2)
        • MariaDB (20)
        • MySql (58)
        • Oracle Database (4)
          • 10g (2)
        • PostgreSQL (3)
        • SQL Server (83)
          • ADS (3)
          • SMO (4)
          • SSMS (8)
          • T-SQL (26)
    • Flutter (2)
    • GIT (23)
    • Java (44)
      • JasperReports (3)
      • Joget (19)
      • Spring Boot (14)
    • Node.js (1)
    • PowerBuilder (11)
      • PowerBuilder 8 (10)
    • Python (8)
    • Rust (1)
    • SVN (1)
    • Testing (7)
      • Automated Testing (4)
        • Playwright (2)
        • Selenium (2)
    • UML (1)
    • Version Control (1)
    • Web (285)
      • CSS (16)
        • Bootstrap (3)
        • Tailwind CSS (3)
      • HTML (23)
      • JavaScript (108)
        • AG Grid (1)
        • Angular (1)
        • jQuery (64)
          • DataTables (14)
        • React (2)
        • Tabulator (11)
        • TypeScript (10)
        • Vue.js (3)
      • PHP (165)
        • CodeIgniter (11)
        • Laravel (33)
          • Laravel 11 (10)
          • Laravel 5 (19)
        • PrestaShop (1)
        • Yii (19)
          • Yii 2 (16)
      • SEO (2)
      • WordPress (22)
  • Programs (82)
    • Bitwarden (5)
    • Excel (8)
    • Figma (7)
    • Google Chrome (6)
    • Mozilla Firefox (9)
    • Oh My ZSH (4)
    • Stalwart (5)
    • USB Boot (7)
  • Q & A (8)
  • Security (32)
  • Tips & Tricks (72)
    • iPhone (7)
      • Jailbreaking (2)
  • กฎหมาย (3)
  • คณิตศาสตร์ (4)

Sirat WordPress Theme By VWThemes

Scroll Up