ดูเหมือนว่าคุณได้ทำการตัดสินใจทางเทคนิคในการเก็บข้อมูลระยะสั้นสำหรับแอปพลิเคชันของคุณอย่างถูกต้องคุณเลือกที่จะเขียนเครื่องมือการจัดการแหล่งข้อมูลแบบกำหนดเอง
คุณกำลังนั่งอยู่บนเครื่องบินต่อเนื่องพร้อมตัวเลือกที่จะเคลื่อนที่ไปในทิศทางใดทิศทางหนึ่ง
ในระยะยาวคุณมีโอกาส (เกือบ แต่ไม่ใช่ 100% อย่างแน่นอน) พบว่าตัวเองมีปัญหาและอาจเปลี่ยนไปใช้โซลูชันแหล่งข้อมูลที่มีอยู่ได้ดีขึ้น มีปัญหาเกี่ยวกับประสิทธิภาพที่เฉพาะเจาะจงธรรมดามากคาดเดาได้และคุณจะถูกบังคับให้ต้องรับมือและคุณก็ดีขึ้นด้วยการใช้เครื่องมือที่มีอยู่แทนที่จะใช้เครื่องมือของคุณเอง
ดูเหมือนว่าคุณได้เขียนฐานข้อมูลแบบกำหนดเอง (เล็ก) ที่สร้างขึ้นและแอปพลิเคชันของคุณโดยตรง ฉันสมมติว่าคุณใช้ระบบปฏิบัติการและระบบไฟล์เพื่อจัดการการเขียนและอ่านดิสก์จริงและดำเนินการรวมกันเป็นแหล่งข้อมูล
เมื่อใดจะทำในสิ่งที่คุณทำ
คุณกำลังนั่งอยู่ในจุดที่ดีสำหรับการจัดเก็บข้อมูล ที่เก็บข้อมูลระบบปฏิบัติการและระบบไฟล์นั้นสะดวกพกพาและข้ามแพลตฟอร์มได้อย่างเหลือเชื่อ ชุดค่าผสมนั้นมีมานานแล้วซึ่งแน่นอนว่าคุณจะได้รับการสนับสนุนและมีการเรียกใช้แอปพลิเคชันของคุณในเกือบทุกคอนฟิกูเรชันการปรับใช้มาตรฐาน
นอกจากนี้ยังเป็นการผสมผสานที่ง่ายในการเขียนโค้ดสำหรับ - APIนั้นค่อนข้างตรงไปตรงมาและเป็นพื้นฐานและใช้รหัสไม่กี่บรรทัดเพื่อให้มันทำงานได้
โดยทั่วไปแล้วมันเหมาะอย่างยิ่งที่จะทำสิ่งที่คุณทำเมื่อ:
- สร้างต้นแบบความคิดใหม่
- การสร้างแอพพลิเคชั่นซึ่งไม่น่าจะสูงมากที่จะต้องไต่ระดับประสิทธิภาพที่ชาญฉลาด
- จำกัด โดยสถานการณ์ที่ผิดปกติเช่นการขาดทรัพยากรสำหรับการติดตั้งฐานข้อมูล
ทางเลือก
คุณมีตัวเลือกที่ต่อเนื่องและมีสองทิศทางที่คุณสามารถไปจากที่นี่สิ่งที่ฉันคิดว่าเป็น 'ลง' และ 'ขึ้น':
ลง
นี่เป็นตัวเลือกที่มีโอกาสน้อยที่สุดที่จะนำไปใช้ แต่เพื่อประโยชน์ที่ครบถ้วน:
คุณสามารถลงไปได้ถ้าคุณต้องการข้ามระบบปฏิบัติการและระบบไฟล์ไปพร้อม ๆ กันและเขียนและอ่านโดยตรงจากดิสก์ ตัวเลือกนี้มักจะเกี่ยวข้องเฉพาะในกรณีที่จำเป็นต้องใช้ประสิทธิภาพสูงสุด - ตัวอย่างเช่นอุปกรณ์เล่นMP3ขนาดจิ๋ว / เล็กไม่มีRAMเพียงพอสำหรับระบบปฏิบัติการที่ใช้งานได้สมบูรณ์หรือสิ่งที่ต้องการWayback Machineซึ่งต้องการมวลที่มีประสิทธิภาพอย่างเหลือเชื่อ การดำเนินการเขียนข้อมูล (ร้านค้าส่วนใหญ่แลกกับการเขียนที่ช้ากว่าเพื่อการอ่านที่เร็วขึ้นเนื่องจากเป็นกรณีการใช้งานทั่วไปที่แพร่หลายมากขึ้นสำหรับแอปพลิเคชันเกือบทั้งหมด)
ขึ้น
มีหมวดหมู่ย่อยหลายประเภทที่นี่ - ซึ่งไม่ได้มีลักษณะเฉพาะอย่างแท้จริง เครื่องมือบางตัวครอบคลุมทั้งสองอย่างโดยมีฟังก์ชั่นการใช้งานบางอย่างสามารถเปลี่ยนจากการทำงานในโหมดหนึ่งไปเป็นโหมดอื่นได้อย่างสมบูรณ์และบางส่วนสามารถวางซ้อนทับกัน
แหล่งข้อมูลที่มีประสิทธิภาพยิ่งขึ้น
คุณอาจพบว่าคุณต้องการจัดเก็บข้อมูลปริมาณมากขึ้นและสูงขึ้นในขณะที่ยังต้องพึ่งพาแอพพลิเคชั่นของคุณเองในการจัดการความซับซ้อนในการจัดการข้อมูล มีร้านค้าคีย์ - ค่ามากมายให้คุณเลือกใช้พร้อมด้วยการสนับสนุนที่หลากหลายสำหรับฟังก์ชั่นที่เกี่ยวข้อง เครื่องมือNoSQLอยู่ในหมวดหมู่นี้รวมถึงเครื่องมืออื่น ๆ
นี่คือเส้นทางที่ชัดเจนในการขยายขนาดเมื่อสิ่งต่อไปนี้อธิบายใบสมัครของคุณ:
- เป็นการอ่านที่หนักผิดปกติ
- คุณตกลงกับการซื้อขายที่มีประสิทธิภาพสูงกว่าสำหรับการรับประกันความสอดคล้องที่ต่ำกว่า (ระยะสั้น) (ข้อเสนอมากมาย "ความสอดคล้องในที่สุด")
- คือ "โดยตรง" การจัดการกับการจัดการข้อมูลส่วนใหญ่และการขาดความมั่นคง (ในทางปฏิบัติคุณอาจท้ายด้วยการใช้เครื่องมือของบุคคลที่สามในตอนแรกแม้ว่าในที่สุดคุณจะนำสิ่งนี้เข้าสู่แอปพลิเคชันของคุณ .
- คุณต้องการขยายจำนวนข้อมูลที่คุณจัดเก็บและ / หรือความสามารถในการค้นหาข้อมูลอย่างหนาแน่นด้วยข้อกำหนดการจัดการข้อมูลที่ค่อนข้างง่าย
มีห้องเลื้อยอยู่ที่นี่ - คุณสามารถบังคับให้อ่านได้ดีกว่าเดิมสำหรับการอ่านที่ช้าลง เครื่องมือและตัวเลือกต่าง ๆ ให้ apis การจัดการข้อมูลดัชนีและตัวเลือกอื่น ๆ ซึ่งอาจจะมากหรือน้อยเหมาะสำหรับการเขียนแอปพลิเคชันเฉพาะของคุณได้อย่างง่ายดาย ดังนั้นหากคะแนนด้านบนเกือบจะอธิบายใบสมัครของคุณเกือบทั้งหมดคุณอาจ "ใกล้พอ" เพื่อทำงานกับโซลูชันแหล่งข้อมูลที่ทรงพลังกว่า
ตัวอย่างที่รู้จักกันดี: CouchDB , MongoDB , Redis , โซลูชั่นการจัดเก็บข้อมูลบนคลาวด์เช่นAzureของ Microsoft , Google App Data Store และ ECE ของ Amazon
เอ็นจิ้นการจัดการข้อมูลที่ซับซ้อนมากขึ้น
แอพพลิเคชั่นการจัดเก็บข้อมูลตระกูล "SQL" รวมถึงช่วงอื่น ๆ นั้นมีการอธิบายที่ดีกว่าว่าเป็นเครื่องมือการจัดการข้อมูล พวกเขามีฟังก์ชั่นเพิ่มเติมที่หลากหลายนอกเหนือจากการจัดเก็บข้อมูลและบ่อยครั้งกว่าสิ่งที่มีอยู่ในด้านการจัดเก็บค่าคีย์ คุณจะต้องใช้เส้นทางนี้เมื่อ:
- คุณต้องอ่านอย่างสม่ำเสมอแม้ว่ามันจะหมายความว่าคุณจะได้รับความนิยม
- คุณกำลังมองหาที่จะทำการจัดการข้อมูลที่ซับซ้อนอย่างมีประสิทธิภาพ - คิดถึงการดำเนินการ JOIN และ UPDATE ที่ซับซ้อนมากลูกบาศก์ข้อมูลและการแบ่งส่วน ฯลฯ
- คุณสามารถตกลงกับการซื้อขายที่เข้มงวดสำหรับประสิทธิภาพ (คิดว่าถูกบังคับรูปแบบการจัดเก็บข้อมูลคงที่เช่นตารางซึ่งไม่สามารถเปลี่ยนแปลงได้ง่ายและ / หรือมีประสิทธิภาพ)
- คุณมีทรัพยากรที่จะจัดการกับชุดเครื่องมือและอินเทอร์เฟซที่ซับซ้อนกว่าบ่อยครั้ง
นี่เป็นวิธีคิดแบบดั้งเดิมที่มีต่อฐานข้อมูลหรือที่เก็บข้อมูลและใช้เวลานานกว่ามากดังนั้นจึงมีสิ่งต่างๆมากมายให้คุณได้ใช้ที่นี่และมักจะมีความซับซ้อนมากมายในการจัดการ เป็นไปได้แม้ว่าจะต้องใช้ความเชี่ยวชาญและความรู้และสร้างโซลูชันที่เรียบง่าย / หลีกเลี่ยงความซับซ้อนมาก - คุณมักจะใช้เครื่องมือและห้องสมุดของบุคคลที่สามในการจัดการส่วนใหญ่สำหรับคุณ
ตัวอย่างที่รู้จักกันเป็นอย่างดีMySQL , SQL Server , ฐานข้อมูลของออราเคิลและDB2
จ้างงานจากภายนอก
มีเครื่องมือและไลบรารีของบุคคลที่สามที่ทันสมัยและหลากหลายซึ่งผสานเข้าด้วยกันระหว่างเครื่องมือจัดเก็บข้อมูลและแอปพลิเคชันของคุณเพื่อช่วยคุณจัดการความซับซ้อน
พวกเขาพยายามที่จะกำจัดงานส่วนใหญ่หรือทั้งหมดที่เริ่มต้นในการจัดการและจัดการกับที่เก็บข้อมูลและช่วยให้คุณสามารถเปลี่ยนเป็นความซับซ้อนได้อย่างราบรื่นเฉพาะเมื่อจำเป็นและเมื่อจำเป็นเท่านั้น นี่เป็นพื้นที่ของผู้ประกอบการและการวิจัยที่มีผลลัพธ์ไม่กี่อย่างที่สามารถเข้าถึงได้และใช้งานได้ทันที
ตัวอย่างที่รู้จักกันดีMVCเครื่องมือ ( Django , Yii ), Ruby on RailsและDatomic มันยากที่จะยุติธรรมที่นี่เนื่องจากมีเครื่องมือและไลบรารีหลายสิบตัวที่ทำหน้าที่ห่อหุ้ม APIs ของที่เก็บข้อมูลต่างๆ
PS: หากคุณต้องการวิดีโอเป็นข้อความคุณอาจต้องการดูวิดีโอที่เกี่ยวข้องกับฐานข้อมูลของ Rich Hickey เขาทำงานได้ดีในการอธิบายความคิดส่วนใหญ่ที่มีต่อการเลือกการออกแบบและการใช้แหล่งข้อมูล