เมื่อใดควรใช้ฐานข้อมูลมากกว่าการแยกวิเคราะห์ข้อมูลจากไฟล์ข้อความ


13

ผมทำโปรแกรมหลามในการวัดการเจริญเติบโตของcodereview.SE วิธีการของฉันคือการได้รับ "สถิติเว็บไซต์" ที่แสดงในหน้าแรกและเก็บไว้ในฮาร์ดไดรฟ์ของฉัน ฉันวางแผนที่จะทำสิ่งนี้ทุกวัน จนถึงตอนนี้ฉันได้ทำพอที่จะรับสถิติและผนวกเข้ากับไฟล์ข้อความ สคริปต์หลามสามารถดูได้บนGitHub รูปแบบที่ฉันใช้มีดังต่อไปนี้

22-08-2013

questions 9073
answers 15326
answered 88
users 26102
visitors/day 7407

22-08-2013

questions 9073
answers 15326
answered 88
users 26102
visitors/day 7407

ฉันเพิ่งรันสคริปต์สองครั้งเพื่อให้ได้รูปแบบที่ฉันต้องการใช้ในไฟล์ ตอนแรกมันดูดีสำหรับฉันเพราะฉันจะเก็บมันเองและรูปแบบจะเหมือนกันดังนั้นจึงสามารถแยกวิเคราะห์ได้ง่าย แต่ฉันไม่แน่ใจ ดูเหมือนว่าการใช้ฐานข้อมูลควรจะดีกว่าที่นี่เพราะวิธีการดึงข้อมูลควรง่ายกว่า แค่ทราบว่าฉันไม่เคยใช้ฐานข้อมูลใด ๆ และไม่มีความรู้เกี่ยวกับ SQL, MySQL หรือตัวแปรอื่น ๆ ของ RDBMS

ดังนั้นสิ่งนี้นำมาสู่คำถาม เมื่อใดที่ฐานข้อมูลควรเป็นที่ต้องการสำหรับการจัดเก็บข้อมูลมากกว่าการจัดเก็บข้อมูลในไฟล์ข้อความ? มีตัวชี้บางอย่างที่ฉันสามารถค้นหาได้เมื่อตัดสินใจว่าต้องใช้ฐานข้อมูลหรือไฟล์ข้อความธรรมดาหรือไม่?

PS: ถ้าสามารถเพิ่มแท็กที่ดีกว่าได้โปรดทำเช่นนั้น ฉันมีข้อสงสัยเกี่ยวกับแท็กที่สามารถเพิ่มได้


"เครื่องมือทุกอย่างมีความรับผิดชอบจนกว่าคุณจะเรียนรู้วิธีใช้งาน"
JeffO

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

คำตอบ:


14

เมื่อใดที่ฐานข้อมูลควรเป็นที่ต้องการสำหรับการจัดเก็บข้อมูลมากกว่าการจัดเก็บข้อมูลในไฟล์ข้อความ?

วิกิพีเดียบอกเราว่าฐานข้อมูลเป็นคอลเลกชันของข้อมูลที่จัด โดยการวัดนั้นไฟล์ข้อความของคุณเป็นฐานข้อมูล มันพูดต่อไปว่า:

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

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

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

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

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

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

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


3
"คิดว่าไฟล์ข้อความของคุณเป็นฐานข้อมูลเปลี่ยนไป" ฉลาดมาก ส่วนที่เกี่ยวกับฉันเพียงแค่มี 3650 รายการก็เป็นประโยชน์ มันช่วยให้ได้มุมมองที่แท้จริงของปัญหา
Aseem Bansal

1
คำตอบที่ underrated สูงนี้เป็นครั้งที่สองที่ฉันกลับมา
Hashim

6

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

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


การทำงานร่วมกันไม่ได้ดีขึ้นตามการออกแบบโดยรวมหรือไม่? เช่นในกรณีของฉันฉันกำลังเก็บค่า 5 ค่าที่สอดคล้องกับแต่ละวัน ในสถานะปัจจุบันไม่มีความเชื่อมโยงกันระหว่างข้อมูล
Aseem Bansal

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

3

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


"ต้องอ่าน / เขียนกี่ครั้ง" - นั่นช่วยได้
Aseem Bansal

2

ฐานข้อมูลไม่ได้ใช้เพียงแค่จัดเก็บ แต่จัดการและสืบค้นข้อมูลดังนั้นคุณต้องตัดสินใจอย่างมีความรู้:

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

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

หากคุณต้องการเล่นกับ SQL และสิ่งที่สามารถทำได้ SQLFiddle.com มีรูปแบบ RDBMS ที่แตกต่างกันสองสามแบบซึ่งคุณสามารถเล่นกับ (เรียกใช้แบบสอบถามสร้างสคีมาเป็นต้น)


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

2

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

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

สำหรับประสบการณ์ของฉันถ้าคุณยังใหม่กับฐานข้อมูลคุณอาจพบว่าใช้งานง่ายกว่าเช่น couchdb: http://couchdb.apache.org/ซึ่งไม่ใช่ sql และคุณสามารถใช้ javascript หรือ python โดยตรงเพื่อสอบถาม

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