ฉันจะสร้างโปรเจ็กต์แรกของฉันใน Rails ซึ่งประกอบด้วยในเว็บแอปที่ประกอบด้วย 3 ส่วนหลัก:
- ส่วนคงที่ที่ไม่มีการใช้ฐานข้อมูล
- ส่วนการลงทะเบียนผู้ใช้ซึ่งจะต้องใช้ฐานข้อมูลและฉันสามารถใช้ MySQL ได้เนื่องจากแถวของผู้ใช้แต่ละคนจะมีเขตข้อมูลเดียวกัน
- "แอป" ที่ผู้ใช้จะสามารถสร้างจัดการแก้ไข ... รายการในคอลเล็กชันและแบ่งปันกับผู้ใช้รายอื่น
จะมีหลายประเภทรายการและแต่ละประเภทจะมีตัวเลือกต่างกันเช่นฉันอาจมีรายการ "วิดีโอ" พร้อมตัวเลือกต่อไปนี้:
- รหัส
- user_id
- collection_id
- หัวข้อ
- แพลตฟอร์ม (ถ้าฝัง)
- URL (ถ้าฝัง)
- ชื่อไฟล์ (หากโฮสต์บนแอปของฉัน)
- ขนาดไฟล์ (id โฮสต์บนแอปของฉัน)
และรายการ "แผนที่":
- รหัส
- user_id
- collection_id
- หัวข้อ
- แพลตฟอร์ม (แผนที่ google, แผนที่ bing ... )
- ที่ตั้ง
- URL
- ขนาดแผนที่
ในขณะที่คุณสามารถสำหรับผู้ใช้ฉันอาจใช้ MySQL สำหรับรายการความยืดหยุ่นของ MongoDB อาจมีประโยชน์เนื่องจากแต่ละรายการอาจต้องการตัวเลือกที่แตกต่างกันแล้วรายการอื่น
ถึงตอนนี้ฉันมักจะใช้ PHP และ MySQL (บนพื้นที่สาธารณะที่ใช้ร่วมกันสำหรับโครงการขนาดเล็ก) และความสามารถในการปรับขนาดนั้นเป็นคำศัพท์ใหม่สำหรับฉันทั้งหมด
ฉันมีเวลาเรียนรู้ แต่ฉันอยากจะทำสิ่งที่เป็นรูปธรรมในบางสิ่งอย่างเช่น 1 เดือน
ฉันได้อ่านมากเกี่ยวกับ MongoDB และ NoSQL vs RDMS และ MySQL และหลังจากลองฉันต้องบอกว่าฉันชอบวิธีการทำงานของ MongoDB: ไม่มีตารางไม่มีแถวและเอกสาร JSON เช่น:
- ในสถานการณ์ของฉันคุณจะแรคคูน? ทำไม?
- เกี่ยวกับความสามารถในการปรับขยายอาจมีปัญหากับ MongoDB หรือไม่ ถ้าใช่เมื่อ (ในแง่ของขนาดฐานข้อมูล) และปัญหาเหล่านี้อาจทำให้แอปของฉันช้าลงอย่างมาก?
แก้ไข: แอพจะทำงานอย่างไร
เนื่องจากหลายคนถามว่านี่เป็นวิธีที่ฉันต้องการให้แอปทำงาน:
- ผู้ใช้ลงทะเบียน
- เขาเข้าสู่ระบบ
- เขาสร้างคอลเล็คชั่นแรกของเขาซึ่งเขาสามารถสร้างไอเท็มไม่สิ้นสุด
- รายการมีหลากหลายประเภทและแต่ละประเภทต้องการข้อมูลที่แตกต่างกันเพื่อบันทึกในฐานข้อมูลและประเภทของรายการอาจถูกเพิ่มหรือแก้ไข
ผู้ใช้สามารถสร้างคอลเลกชันและรายการอื่น ๆ ที่อยู่ภายใน
ดังนั้นเราจึงมี CRUD สำหรับคอลเลกชันและรายการภายในของพวกเขาและแต่ละคอลเลกชัน / รายการจะเรียกผู้ใช้เฉพาะ
ปัญหาหลักของ MySQL คือมันไม่มี schema ที่ยืดหยุ่นมีวิธีแก้ไขปัญหานี้หรือไม่?
คิดเกี่ยวกับ NoSQL ข้อสงสัยเดียวที่ฉันมีเกี่ยวกับการเข้าร่วมตัวอย่างเช่นมีการรวบรวมบางอย่างที่ฉันต้องการดึงข้อมูลที่เกี่ยวข้องกับผู้ใช้ที่มี id = user_id ในคอลเลกชัน
แก้ไข: ความคิดที่จะใช้ MySQL ต่อไป
สร้างเขตข้อมูลในตาราง "รายการ" ด้วยการตั้งค่าเพิ่มเติมแต่ละการตั้งค่าหารด้วย | หรือสัญลักษณ์อื่น
จากนั้นฉันจะบันทึกโครงสร้างของการตั้งค่าเพิ่มเติมแต่ละรายการตัวอย่างเช่น "หมายเหตุ" ประเภทรายการต้องการการตั้งค่าเพิ่มเติมสองแบบ "สี" และ "strange_setting" เมื่อฉันได้รับข้อมูลจาก MySQL ฉันจะแยกฟิลด์สำหรับการตั้งค่าเพิ่มเติมลงใน array รู้ว่ารายการแรกในอาร์เรย์มีไว้สำหรับ "color" และอื่น ๆ
คุณคิดอย่างไร? มีปัญหากับวิธีแก้ไขปัญหาเหรอ? คุณมีความคิดอื่น ๆ อีกไหม?