วิธีที่ดีที่สุดในการพิจารณาว่าเมื่อใดที่เหมาะสมที่จะใช้ฐานข้อมูล


13

ฉันเริ่มอาชีพการเขียนโปรแกรมในการพัฒนาเว็บไซต์โดยใช้ PHP และ MySQL ฉันค่อนข้างคุ้นเคยกับการใช้ฐานข้อมูลสำหรับการจัดเก็บข้อมูลแบบไดนามิกส่วนใหญ่เช่นเดียวกับข้อมูลการตั้งค่า / พารามิเตอร์บางอย่าง บางครั้งจะมีข้อมูลจำนวนมากในขณะที่เวลาอื่น ๆ รายการในตารางจะน้อย สำหรับฉันนี่ดูเหมือนเป็นเรื่องธรรมดาและเท่าที่ฉันรู้ว่านี่เป็นวิธีที่ได้รับการยอมรับมากในการพัฒนาเว็บ (โปรดแก้ไขฉันหากฉันผิด ... )

ฉันกำลังขุดเข้าไปในแอปพลิเคชันบนเดสก์ท็อปในขณะนี้และความชอบตามธรรมชาติของฉันคือการใช้ฐานข้อมูลอีกครั้งเพื่อจัดเก็บข้อมูลจำนวนมากที่จะถูกสร้างขึ้นผ่านการใช้งานแอปพลิเคชัน อย่างไรก็ตามเท่าที่ฉันสามารถบอกได้ว่าฉันไม่เห็นแอปพลิเคชัน (ที่ฉันใช้) ใช้งานฐานข้อมูลบ่อยครั้งมาก [แก้ไข: ตั้งแต่มีการชี้ให้เห็นว่านี่เป็นข้อสันนิษฐานที่ผิดพลาดในการใช้งานจำนวนมากที่ใช้น้ำหนักเบา dbs ฝังตัวอยู่ในโปรแกรมของตัวเอง] เหตุผลสำหรับสิ่งนี้คืออะไร? จุดไหนที่เหมาะสมที่จะใช้ db? มีมาตรฐานใด ๆ ในเรื่องนี้หรือไม่? นอกจากนี้ยังมีเหตุผลอะไรที่จะไม่ใช้ฐานข้อมูลเพื่อพัฒนาแอปพลิเคชันเดสก์ทอป


2
"อย่างไรก็ตามเท่าที่ฉันสามารถบอกได้ว่าฉันไม่เห็นแอปพลิเคชัน (ที่ฉันใช้) การใช้ฐานข้อมูลบ่อย" ขึ้นอยู่กับอะไร หากพวกเขาใช้ SQLite คุณจะบอกได้อย่างไรว่าพวกเขาใช้หรือไม่ใช้ฐานข้อมูล
S.Lott

นั่นคือเหตุผลที่ฉันพูดเท่าที่ฉันสามารถบอกได้ว่าฉันรู้ว่ามีความเป็นไปได้ที่ฉันผิด ฉันคิดว่าอาจมีแอพบางตัวที่ใช้ db db ของตัวฝังตัว ... เป็นเรื่องปกติไหมที่แอพจะใช้ dbs?
Kenneth

@ เคนเน็ ธ : โปรด Google สำหรับฐานข้อมูลเช่น SQLite ที่ฝังอยู่ มีมากมาย. พวกเขากำลังใช้กันอย่างแพร่หลาย AFAIK, iOS ของ Apple ใช้เพื่อการคงอยู่ทั้งหมด โปรด Google
S.Lott

2
ฉัน Google มาก บางครั้งแม้ว่าไม่มีอะไรมาแทนที่ความคิดเห็นที่มีประสบการณ์ซึ่งคุณไม่สามารถหา googling ได้เสมอ
Kenneth

1
ฉันคิดว่าความคิดเห็นเหล่านี้เพียงพอที่จะแก้ไขข้อผิดพลาด ฉันขอโทษสำหรับข้อผิดพลาด ฉันรู้สึกว่าฉันใช้ Google googling ผสมผสานกับการถามคำถาม บางครั้งไม่มีการแทนที่ IMHO หลัง ตอนนี้ googling ของฉันจะดีขึ้นและมีประสิทธิผลมากขึ้น
Kenneth

คำตอบ:


4

หากแอปพลิเคชันของคุณเป็นแบบเอกสารให้จัดเก็บสิ่งต่าง ๆ ในไฟล์เอกสาร

หากแอปพลิเคชันของคุณเกี่ยวข้องกับข้อมูลที่มีโครงสร้างมากเกินไปสำหรับเอกสารเดียว (เช่นเอกสาร XML) ให้ใช้ฐานข้อมูล


7

ระบบฐานข้อมูลนั้นถูกมองว่าเป็นบริการที่ค่อนข้างหนักซึ่งคุณไม่จำเป็นต้องติดตั้งในเครื่องไคลเอนต์ทุกเครื่อง จริง ๆ แล้วฉันเคยอยู่ในสถานการณ์ (การพัฒนาแอปเดสก์ท็อป GUI ที่จำเป็นต้องบันทึกข้อมูลจำนวนมาก) ซึ่งระบบฐานข้อมูลจริงจะเป็นทางออกที่ "ดีเลิศ" - แต่เพราะเมื่อวันก่อนฐานข้อมูลที่มีอยู่ก็ค่อนข้างหนัก เราไปกับไฟล์ข้อมูลแบบแบนแทน

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

ด้วยการพัฒนาเว็บเซิร์ฟเวอร์นั้นเป็นแบ็คเอนด์ที่มีฐานข้อมูลอยู่เสมอ เช่น. ผู้ใช้ไม่ต้องกังวลกับการติดตั้งฐานข้อมูลในตอนท้าย


ดังนั้นคุณไม่แนะนำให้ใช้ db สำหรับแอปแบบสแตนด์อโลนเว้นแต่ว่ามีข้อมูลจำนวนมากรับประกันจริงหรือ
Kenneth

คุณคิดอย่างไรเกี่ยวกับการใช้ db น้ำหนักเบา ... เหมือนกับฐานข้อมูลเต็มตัว
เคนเน็ ธ

1
@ เคนเน็ ธ : ฉันจะพูดว่า "มันขึ้นอยู่กับ" หากแอปพลิเคชันเรียกใช้ข้อมูลตารางจำนวนมากที่เรียกร้องให้อยู่ในฐานข้อมูลที่เหมาะสมจริง ๆ แล้วอาร์กิวเมนต์อาจมีความแข็งแรงพอที่จะส่งแอปด้วย DB น้ำหนักเบา แต่ถ้าเป็นเพียงการกำหนดค่า / การตั้งค่าประเภทข้อมูลก็อาจจะเกินกำลัง
Bobby Tables

5

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

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


+1 หากคุณไม่มีปัญหาการคงอยู่ที่ซับซ้อนเช่นการอัปเดตการบล็อกหลายผู้ใช้หลายผู้ใช้หลายตำแหน่งพร้อมกันฐานข้อมูลดั้งเดิมอาจ overkill หากข้อมูลที่เป็นปัญหาค่อนข้างคงที่ (ข้อมูลอาจเพิ่มขึ้นหรือเพิ่ม แต่ไม่พัฒนาหรืออัปเดต) และการแข่งขัน / การแข่งขันไม่ได้เกิดขึ้นบ่อยหรือผิดเพี้ยน ไม่สามารถยอมรับได้เมื่อพิจารณาถึงประสิทธิภาพและความสลับซับซ้อนที่ซับซ้อน) คุณอาจไม่ต้องการฐานข้อมูล
JustinC

4

สิ่งหนึ่งที่คุณอาจต้องการตรวจสอบคือฐานข้อมูลขนาดเล็กที่ไม่ต้องการบริการฐานข้อมูลที่ใช้งานจริง เช่นด้านหน้า Microsoft มีSQL Server Compactซึ่งฟรีต้องใช้ไฟล์เดียวสำหรับฐานข้อมูลและ DLL บางตัวที่เพิ่มเข้ามาในแอปของคุณ

ฉันมั่นใจว่ามีตัวเลือกที่คล้ายกันในแพลตฟอร์มอื่น ๆ


1
ตัวอย่างที่คล้ายกันมากในฝั่ง Java คือ Derby ฉันคิดว่ามีคนอื่นด้วย
jprete

1
ดูเหมือนว่ามันจะเป็นทางออกที่ดีเยี่ยม ... ฉันสนุกกับการใช้ประโยชน์จากฐานข้อมูล! lol
Kenneth

มีข้อเสียในการใช้ db น้ำหนักเบาหรือไม่?
เคนเน็ ธ

@ เคนเน็ ธ : มันทำให้การติดตั้งของคุณใหญ่ขึ้นและสามารถเพิ่ม codebase ได้ แต่นั่นน้อยกว่าการติดตั้งเซิร์ฟเวอร์ฐานข้อมูลทั้งหมดบนไคลเอนต์ซึ่งมักจะกระทำเมื่อแอปพลิเคชันถูกเผยแพร่และต้องการฐานข้อมูลที่มีความสำคัญมากขึ้นเท่านั้น Berkeley DBเป็นหนึ่งในผู้ใช้กันมากที่สุด
Orbling

อีกทางเลือกหนึ่งคือ SQLite ซึ่งเป็นไกลเบาทั้ง RAM และพื้นที่ดิสก์และไม่ได้มีข้อ จำกัด ใด ๆ โดยพล ไม่น่าแปลกใจที่มันถูกใช้โดยสมาร์ทโฟนและเว็บเบราว์เซอร์ที่ไม่ใช่ MS ทั้งหมด
Javier

2

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

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

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

การทำให้เอกสารที่เก็บไว้สามารถอ่านได้ด้วยเครื่องมือนอกเหนือจากแอปพลิเคชันหลักนั้นเป็นข้อได้เปรียบที่ยิ่งใหญ่ในหลายกรณีดังนั้นการใช้รูปแบบที่มนุษย์สามารถอ่านได้ (XML, JSON, YAML, ฯลฯ ) หรือ zipfile ที่รวมกัน พบมากขึ้น

ในหลอดเลือดดำเดียวกันการใช้ไลบรารีฐานข้อมูลแบบฝัง (BDB, Tokyo Cabinet, SQLite, MS-SQL * เซิร์ฟเวอร์ Compact เป็นต้น) เป็นอีกวิธีที่ยอดเยี่ยม


1

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

ตัวอย่างเช่นพิจารณา:

#include "superheader.h"

int main()
{
    int row=2, column=2;
    DatabaseType db;
    db.ConnectTo("programDB", "user", "pass");
    db.setTable("messages");
    string hello_world=db.fetch(row, column);
    cout<<hello_world;
    return 0;
}

มันง่ายเกินไป แต่ก็ชัดเจนเกินไป ไม่มีจุดจริงที่จะมีระดับของการจัดการข้อมูลสำหรับ "Hello World"

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

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


1

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.