C # Minimal SQL Database


12

ฉันกำลังทำงานในโครงการขนาดเล็ก (ไม่ใช่การผลิต) ที่ฉันต้องการจัดเก็บข้อมูลเพียงพอว่าบางสิ่งเช่น CSV จะไม่มีประสิทธิภาพในการประมวลผลและเซิร์ฟเวอร์ SQL / MySQL จะมากเกินไป . Net มีวิธีใดในการจัดเก็บข้อมูลหลายรายการอย่างมีประสิทธิภาพด้วยความสามารถในการสืบค้นโดยไม่ต้องจัดการและเชื่อมต่อกับเซิร์ฟเวอร์แทนที่จะโหลดและประมวลผลไฟล์เดียว


หากคุณมีเซิร์ฟเวอร์ฐานข้อมูลอยู่และเปิดใช้งานการสร้างฐานข้อมูลอื่นในนั้นก็มีเรื่องเล็กน้อย หากคุณใช้ข้อมูลเพียงอย่างเดียวคุณอาจพิจารณาใช้ Access
แบรด

@Brad นี่เป็นเพียงโครงการส่วนบุคคลและฉันไม่ได้เรียกใช้เซิร์ฟเวอร์ฐานข้อมูลใด ๆ ที่บ้านของฉัน คำแนะนำของคุณในการเข้าถึงอาจเป็นสิ่งที่ฉันกำลังมองหา
David

4
ฉันไม่ได้เป็นแฟนของการเข้าถึงแต่ฉันจะให้มันอาจเป็นทางออกที่ถูกต้องในบางครั้ง คุณถือว่าการทำให้เป็นอันดับวัตถุ ? เพียงสร้างวัตถุและเขียนลงในไฟล์ (วัตถุอาจเป็นList<foo>)
Dan Pichelman

คุณต้องการให้สิ่งเหล่านี้คงอยู่หรือเพียงแค่ต้องอยู่ในความทรงจำหรือไม่?
Richard

1
@ David: 4000 รายการ - น้อยเหลือเกิน ทำไมไม่ถือพวกเขาทั้งหมดในหน่วยความจำ หากคุณต้องการฐานข้อมูลในหน่วยความจำในการสร้างแบบสอบถามโดยไม่มีเครื่องมือการจัดการชุดข้อมูลที่มี DataTable (ยังคงอยู่กับไฟล์) อาจเพียงพอสำหรับความต้องการของคุณ
Doc Brown

คำตอบ:


15

มีทางเลือกไม่กี่ลำดับโดยเฉพาะ:

  1. ทุกรุ่น (กรุณาชำระเงิน?) สตูดิโอภาพมาพร้อมกับการติดตั้ง SQL Server Express คุณสามารถใช้มัน
  2. (Ugh) ไฟล์ XML
  3. SQL Server CE (โดยทั่วไปแล้ว SQL ท้องถิ่นผ่านไฟล์)
  4. SQLite

แนวคิดเพิ่มเติมได้ที่นี่: /programming/3639846/what-is-a-good-embedded-database-to-use-with-c


ฉันต้องการบางสิ่งบางอย่างที่มีอยู่ทั้งหมดในการปฏิบัติการเดียวไม่มี DLLs และไม่มีซอฟต์แวร์ของบุคคลที่สาม ข้อใดข้อหนึ่งข้างต้นยกเว้น XML สามารถตอบสนองความต้องการเหล่านี้ได้หรือไม่
David

คุณสามารถฝังไฟล์ dll ในไฟล์สั่งการของคุณได้
Sklivvz

ดีผมคิดว่าเป็นส่วนที่สำคัญที่สุดคือไม่มีบุคคลที่สาม * บริการเช่น MSSQL / MySQL จะ # 3 หรือ 4 # พอดีว่า
เดวิด

ฉันจำไม่ได้ว่า SQL CE มีรันไทม์แยกกันหรือไม่ SQLite ไม่ได้ แต่อาจเป็นเรื่องยุ่งยากเล็กน้อยในการตั้งค่าด้วยโครงการ. NET
GalacticCowboy

3
ฉันจะเพิ่ม LocalDB ที่เป็นตัวเลือก ดูคำตอบนี้: stackoverflow.com/questions/9655362/…
Andy

4

นอกเหนือไปจากตัวเลือก Sklivvz เสนอไม่ต้องกลัวที่จะร่วมทุนนอกดินแดน SQL และใช้โปรแกรมฐานข้อมูลเชิงวัตถุฝังตัวเช่นสเตอร์ลิงหรือdb4o

มันมีข้อดีของการเป็นไฟล์ขนาดเล็กและอิงไฟล์ซึ่งฝังอยู่ในแอปพลิเคชันของคุณ แต่ยังรวดเร็วและง่ายต่อการตั้งโปรแกรม


3

SQLiteจะเป็นตัวเลือกที่ดีที่สุดของคุณ
ตามที่เขียนไว้ในเว็บไซต์:

SQLite เป็นไลบรารีซอฟต์แวร์ที่ใช้เอ็นจินฐานข้อมูล SQL แบบทรานแซคชันที่มีอยู่ในตัวเองแบบไร้เซิร์ฟเวอร์

ดูเหมือนว่าสิ่งที่คุณกำลังมองหา!

แม้จะมีแพ็คเกจ Chocolateyหากคุณขี้เกียจเกินไปที่จะดาวน์โหลดและติดตั้งด้วยตัวคุณเอง!


2

ADO.NET สามารถทำให้เป็นอนุกรมกับ XML และมีการทำงานเกือบทั้งหมดของ RDBMS (อันที่ถูก ๆ )

ฉันรู้ว่ามัน "เก่า" และดูถูกตอนนี้ แต่ ADO.NET ใช้ได้ดีกับสิ่งที่คุณกำลังอธิบาย มันยังทำงานได้ค่อนข้างดีในการติดตามการเปลี่ยนแปลงที่ไม่ได้เกิดขึ้นจริง

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


คุณสามารถอธิบายรายละเอียดเกี่ยวกับ
David

@David - หมายความว่าชุดข้อมูลทั้งหมดจะถูกเก็บไว้ในหน่วยความจำไม่ใช่เฉพาะระเบียนที่คุณส่งคืนจากแบบสอบถาม หากคุณมีฐานข้อมูลจำนวน 4 ล้านเร็กคอร์ดการเก็บข้อมูลทั้งหมดไว้ในชุดข้อมูล ADO.NET จะเป็นการดึงทรัพยากรอย่างจริงจังในขณะที่ RDBMS "ของจริง" จะเก็บไว้ในดิสก์จนกว่าคุณจะสอบถามชุดย่อยของพวกเขา 4000 บันทึกเป็นการจามเล็กน้อยในการใช้หน่วยความจำดังนั้นฉันจึงไม่ต้องกังวล
Wesley Long

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