ฉันกำลังมองหาการเขียนโปรแกรมประยุกต์ VB แบบอิงตามสถานที่ (ติดตั้งในเครื่อง) (ใบแจ้งหนี้ + สินค้าคงคลัง) เป็นแอปพลิเคชัน Clojure บนเว็บสำหรับลูกค้าองค์กรขนาดเล็ก ฉันตั้งใจจะนำเสนอนี้เป็นแอปพลิเคชัน SaaS สำหรับลูกค้าในการค้าที่คล้ายกัน
ฉันกำลังดูตัวเลือกฐานข้อมูล: ตัวเลือกของฉันคือ RDBMS: Postgresql / MySQL ฉันอาจขยายผู้ใช้มากถึง 400 คนในปีแรกโดยทั่วไปแล้วมีจำนวนการดู 20-40 หน้า / ต่อวันต่อผู้ใช้ส่วนใหญ่สำหรับธุรกรรมที่ไม่ใช่มุมมองแบบคงที่ แต่ละมุมมองจะเกี่ยวข้องกับการดึงข้อมูลและอัปเดตข้อมูล การปฏิบัติตามข้อกำหนดของกรดเป็นสิ่งที่จำเป็น (หรือฉันคิดว่า) ดังนั้นปริมาณธุรกรรมไม่มาก
คงจะไม่มีเกมง่ายๆที่จะเลือกสิ่งเหล่านี้ตามความต้องการของฉัน แต่สำหรับข้อกำหนดนี้ซึ่งฉันเชื่อว่าเป็นเรื่องปกติของแอป SaaS: โครงสร้างจะเปลี่ยนแปลงเมื่อฉันเพิ่มลูกค้า / ผู้ใช้และลูกค้าแต่ละราย การเปลี่ยนแปลงความต้องการทางธุรกิจ (ฉันจะเสนอความยืดหยุ่นที่ จำกัด บางอย่างเท่านั้นเริ่มต้นด้วย) เนื่องจากฉันไม่ใช่ผู้เชี่ยวชาญฐานข้อมูลตามสิ่งที่ฉันคิดและอ่านได้ฉันจึงสามารถจัดการได้หลายวิธี:
- มีการออกแบบสคีมา RDBMS แบบดั้งเดิมใน MySQl / Postgresql ด้วยฐานข้อมูลเดียวที่โฮสต์ผู้เช่าหลายคน และเพิ่มคอลัมน์ "ลอยฟรี" มากพอในแต่ละตารางเพื่ออนุญาตให้มีการเปลี่ยนแปลงในอนาคตเมื่อฉันเพิ่มลูกค้ามากขึ้นหรือเปลี่ยนแปลงสำหรับลูกค้าปัจจุบัน สิ่งนี้อาจมีข้อเสียของการเผยแพร่การเปลี่ยนแปลงไปยังฐานข้อมูลทุกครั้งที่มีการเปลี่ยนแปลงเล็กน้อยกับสคีมา ฉันจำได้ว่าการอ่านว่าในการอัพเดตสกีมา Postgresql สามารถทำได้แบบเรียลไทม์โดยไม่ต้องล็อค แต่ไม่แน่ใจว่าเจ็บปวดหรือใช้งานได้จริงในกรณีนี้อย่างไร และเนื่องจากการเปลี่ยนแปลงของ schema อาจแนะนำการเปลี่ยนแปลง SQL ใหม่ / รองเช่นกัน
- มี RDBMS แต่ออกแบบสคีมาฐานข้อมูลอย่างยืดหยุ่น: ใกล้กับเอนทิตีแอตทริบิวต์ - ค่าหรือเป็นที่เก็บคีย์ - ค่า (ตัวอย่างเช่นวันทำงาน, FriendFeed)
- มีทุกสิ่งในหน่วยความจำเป็นวัตถุและเก็บไว้ในล็อกไฟล์เป็นระยะ ๆ (เช่น edval, lmax)
- ไปหา NoSQL DB เช่น MongoDB หรือ Redis แต่จากสิ่งที่ฉันสามารถรวบรวมได้พวกเขาไม่เหมาะกับกรณีการใช้งานนี้และไม่เข้ากับกรดอย่างสมบูรณ์
- ไปหา NewSQL Dbs เช่น VoltDb หรือ JustoneDb (cloud based) ซึ่งยังคงรักษาพฤติกรรมที่สอดคล้องกับ SQL และ ACID และเป็น "new-gen" RDBMS
- ฉันดู neo4j (graphdb) แต่ไม่แน่ใจว่าจะเหมาะกับกรณีการใช้งานนี้หรือไม่
ในกรณีที่ใช้งานของฉันมากกว่าการขยายขนาดหรือการคำนวณแบบกระจายฉันกำลังมองหาวิธีที่ดีกว่าเพื่อให้บรรลุ "ความยืดหยุ่นใน Schema + ACID + ประสิทธิภาพที่เหมาะสม" บทความส่วนใหญ่ที่ฉันพบในเครือข่ายพูดถึงความยืดหยุ่นในสคีมาเป็นสาเหตุที่นำไปสู่ประสิทธิภาพ (ในกรณีของ NoSQL DBs) และความสามารถในการปรับขยายในขณะที่แยกออกจากด้านกรด / ธุรกรรม
นี่เป็นกรณี "หรือ" ของธุรกรรม 'Schema คล่องตัวเทียบกับกรด' หรือมีวิธีที่ดีกว่า?