การออกแบบฐานข้อมูลแบบไม่สัมพันธ์ [ปิด]


114

ฉันสนใจที่จะรับฟังเกี่ยวกับกลยุทธ์การออกแบบที่คุณใช้กับฐานข้อมูล "nosql" ที่ไม่ใช่เชิงสัมพันธ์นั่นคือคลาส (ส่วนใหญ่ใหม่) ของที่เก็บข้อมูลที่ไม่ได้ใช้การออกแบบเชิงสัมพันธ์แบบดั้งเดิมหรือ SQL (เช่น Hypertable, CouchDB, SimpleDB, ที่เก็บข้อมูล Google App Engine, Voldemort, Cassandra, SQL Data Services ฯลฯ ) พวกเขามักเรียกกันว่า "ที่เก็บคีย์ / มูลค่า" และโดยพื้นฐานแล้วจะทำหน้าที่เหมือนตารางแฮชถาวรขนาดยักษ์

โดยเฉพาะฉันต้องการเรียนรู้เกี่ยวกับความแตกต่างในการออกแบบข้อมูลเชิงแนวคิดกับฐานข้อมูลใหม่เหล่านี้ อะไรง่ายกว่ายากกว่าอะไรทำไม่ได้เลย?

  • คุณคิดแบบอื่นที่ทำงานได้ดีกว่าในโลกที่ไม่ใช่เชิงสัมพันธ์หรือไม่?

  • คุณเคยตีหัวกับสิ่งที่ดูเหมือนเป็นไปไม่ได้หรือเปล่า?

  • คุณได้เชื่อมช่องว่างกับรูปแบบการออกแบบเช่นการแปลจากรูปแบบหนึ่งไปเป็นอีกรูปแบบหนึ่งหรือไม่?

  • ตอนนี้คุณทำแบบจำลองข้อมูลที่ชัดเจนหรือไม่ (เช่นใน UML) หรือคุณได้รวบรวมข้อมูลเหล่านี้ทั้งหมดเพื่อสนับสนุนกลุ่มข้อมูลกึ่งโครงสร้าง / เชิงเอกสารหรือไม่?

  • คุณพลาดบริการพิเศษที่สำคัญใด ๆ ที่ RDBMSes มีให้เช่นความสมบูรณ์เชิงสัมพันธ์การสนับสนุนธุรกรรมที่ซับซ้อนโดยพลการทริกเกอร์ ฯลฯ หรือไม่?

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

FYI มีการอภิปราย StackOverflow ในหัวข้อที่คล้ายกันที่นี่:


2
ฐานข้อมูลคีย์ / ค่าเป็นสิ่งใหม่เก่า
Christopher

1
สำหรับใครที่สนใจ uber มีการอภิปรายแบบยาวในกลุ่ม NoSQL google ที่นี่: groups.google.com/group/nosql-discussion/browse_thread/thread/…
Ian Varley

4
FYI ฉันได้เขียนรายงานแบบยาวเกี่ยวกับหัวข้อนี้แล้วที่นี่: google.com/url?sa=D&q=http://ianvarley.com/UT/MR/… ขอขอบคุณทุกท่านสำหรับข้อมูลที่เป็นประโยชน์!
Ian Varley

คำตอบ:


55

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

  1. ระบบที่เหมือน Bigtable (HBase, Hypertable ฯลฯ )
  2. ร้านค้าคีย์ - ค่า (โตเกียวโวลเดอมอร์ ฯลฯ )
  3. ฐานข้อมูลเอกสาร (CouchDB, MongoDB ฯลฯ )
  4. ฐานข้อมูลกราฟ (AllegroGraph, Neo4j, Sesame ฯลฯ )

ผมส่วนใหญ่ลงในฐานข้อมูลกราฟและความสง่างามของการออกแบบข้อมูลโดยใช้กระบวนทัศน์นี้เป็นสิ่งที่นำฉันไปที่นั่นเหนื่อยจากข้อบกพร่องของRDBMS ฉันได้ใส่ตัวอย่างการออกแบบข้อมูลโดยใช้ฐานข้อมูลกราฟไว้ในหน้าวิกินี้และมีตัวอย่างวิธีการสร้างแบบจำลองข้อมูลภาพยนตร์ / นักแสดง / บทบาทของIMDBพื้นฐานด้วย

สไลด์นำเสนอ (สไลด์แชร์) ฐานข้อมูลกราฟและอนาคตของการจัดการความรู้ขนาดใหญ่โดยMarko Rodriguezมีคำแนะนำที่ดีมากเกี่ยวกับการออกแบบข้อมูลโดยใช้ฐานข้อมูลกราฟด้วย

ตอบคำถามเฉพาะจากมุมมองของ graphdb:

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

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

โมเดลข้อมูลที่ชัดเจน: ฉันทำสิ่งเหล่านี้ตลอดเวลา (สไตล์ไวท์บอร์ด) จากนั้นใช้โมเดลตามที่อยู่ในฐานข้อมูลด้วย

พลาดจาก RDBMS world: วิธีง่ายๆในการสร้างรายงาน ปรับปรุง: บางทีมันอาจจะไม่ได้เป็นที่ยากที่จะสร้างรายงานจากฐานข้อมูลกราฟให้ดูที่การสร้างรายงานสำหรับฐานข้อมูล Neo4j ตัวอย่าง


79

ฉันเพิ่งเริ่มต้นด้วยฐานข้อมูลที่ไม่ใช่เชิงสัมพันธ์และฉันยังคงพยายามห่อหัวของฉันและคิดว่าโมเดลที่ดีที่สุดจะเป็นอย่างไร และฉันพูดได้เฉพาะ CouchDB

ฉันยังมีข้อสรุปเบื้องต้น:

คุณคิดแบบอื่นที่ทำงานได้ดีกว่าในโลกที่ไม่ใช่เชิงสัมพันธ์หรือไม่?

โฟกัสการออกแบบเปลี่ยนไป: การออกแบบโมเดลเอกสาร (ที่สอดคล้องกับตาราง DB) แทบจะไม่เกี่ยวข้องกันเลยในขณะที่ทุกอย่างขึ้นอยู่กับการออกแบบมุมมอง (สอดคล้องกับคิวรี)

การเรียงลำดับ DB ของการแลกเปลี่ยนความซับซ้อน: SQL มีข้อมูลที่ไม่ยืดหยุ่นและแบบสอบถามที่ยืดหยุ่นฐานข้อมูลเอกสารเป็นอีกทางหนึ่ง

โมเดล CouchDB คือชุดของ "เอกสาร JSON" (โดยทั่วไปแล้วตารางแฮชที่ซ้อนกัน) เอกสารแต่ละฉบับมี ID ที่ไม่ซ้ำกันและ ID สามารถเรียกดูได้เล็กน้อย สำหรับข้อความค้นหาอื่น ๆ ให้คุณเขียน "มุมมอง" ซึ่งเป็นชื่อชุดของฟังก์ชันแผนที่ / ลด มุมมองจะส่งคืนผลลัพธ์ที่ตั้งค่าเป็นรายการคู่คีย์ / ค่า

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

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

การออกแบบเอกสารมีความยืดหยุ่นอย่างมาก ฉันพบเพียงสองข้อ จำกัด :

  • เก็บข้อมูลที่เกี่ยวข้องไว้ด้วยกันในเอกสารเดียวกันเนื่องจากไม่มีอะไรเกี่ยวข้องกับการรวม
  • อย่าทำให้เอกสารมีขนาดใหญ่จนได้รับการอัปเดตบ่อยเกินไป (เช่นการใส่ยอดขายของ บริษัท ทั้งหมดสำหรับปีในเอกสารเดียวกัน) เนื่องจากการอัปเดตเอกสารทุกครั้งจะทำให้เกิดการจัดทำดัชนีใหม่

แต่ทุกอย่างขึ้นอยู่กับการออกแบบมุมมอง

การออกแบบทางเลือกที่ฉันพบว่าคำสั่งงานที่มีขนาดดีกว่ากับ CouchDB มากกว่าฐานข้อมูล SQL ใด ๆ อยู่ที่ระดับระบบแทนที่จะเป็นระดับการจัดเก็บ หากคุณมีข้อมูลบางส่วนและต้องการแสดงข้อมูลเหล่านี้ในหน้าเว็บความซับซ้อนของระบบทั้งหมดจะลดลงอย่างน้อย 50%:

  • ไม่มีการออกแบบตาราง DB (ปัญหาเล็กน้อย)
  • ไม่มีชั้นกลาง ODBC / JDBC แบบสอบถามและธุรกรรมทั้งหมดบน http (ปัญหาปานกลาง)
  • การแมป DB-to-Object อย่างง่ายจาก JSON ซึ่งแทบจะไม่สำคัญเมื่อเทียบกับ SQL ที่เหมือนกัน(สำคัญ!)
  • คุณสามารถข้ามแอปพลิเคชันเซิร์ฟเวอร์ทั้งหมดได้เนื่องจากคุณสามารถออกแบบเอกสารของคุณให้เรียกค้นได้โดยตรงจากเบราว์เซอร์โดยใช้ AJAX และเพิ่มการขัด JavaScript เล็กน้อยก่อนที่จะแสดงเป็น HTML (ขนาดใหญ่ !!)

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

คุณเคยตีหัวกับสิ่งที่ดูเหมือนเป็นไปไม่ได้หรือเปล่า?

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

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

ตามตัวอย่างข้อ จำกัด จำนวนและผลรวมเป็นเรื่องง่าย แต่ไม่สามารถคำนวณค่าเฉลี่ยโดยมุมมอง / แบบสอบถาม CouchDB แก้ไข: ส่งคืนผลรวมและนับแยกกันและคำนวณค่าเฉลี่ยบนไคลเอนต์

คุณได้เชื่อมช่องว่างกับรูปแบบการออกแบบเช่นการแปลจากรูปแบบหนึ่งไปเป็นอีกรูปแบบหนึ่งหรือไม่?

ฉันไม่แน่ใจว่าเป็นไปได้ เป็นการออกแบบใหม่ทั้งหมดมากกว่าเช่นการแปลโปรแกรมรูปแบบการทำงานเป็นสไตล์เชิงวัตถุ โดยทั่วไปมีประเภทเอกสารน้อยกว่าตาราง SQL และข้อมูลมากกว่าในแต่ละเอกสาร

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

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

ตอนนี้คุณทำแบบจำลองข้อมูลที่ชัดเจนหรือยัง (เช่นใน UML)

ขออภัยไม่เคยทำ UML มากก่อนฐานข้อมูลเอกสาร :)

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

คุณพลาดบริการพิเศษหลัก ๆ ที่ RDBMSes มีให้หรือไม่?

Nope แต่พื้นเพของฉันคือนักพัฒนาแอปพลิเคชันบนเว็บเราจัดการกับฐานข้อมูลในขอบเขตที่เราต้องการเท่านั้น :)

บริษัท ที่ฉันเคยทำงานเพื่อสร้างผลิตภัณฑ์ (เว็บแอป) ที่ออกแบบมาให้ทำงานข้ามฐานข้อมูล SQL จากผู้ขายหลายรายและ "บริการพิเศษ" นั้นแตกต่างจาก DB ถึง DB มากจนต้องใช้แยกกันสำหรับแต่ละ DB ดังนั้นการย้ายฟังก์ชันออกจาก RDBMS จึงมีน้อยลง สิ่งนี้ยังขยายไปสู่การค้นหาแบบเต็มข้อความ

ดังนั้นสิ่งที่ฉันยอมแพ้คือสิ่งที่ฉันไม่เคยมีมาตั้งแต่แรก เห็นได้ชัดว่าประสบการณ์ของคุณอาจแตกต่างกัน


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

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

สิ่งที่ฉันพยายามจะบอกคือแอปพลิเคชันฐานข้อมูลเอกสารที่ประสบความสำเร็จทั้งหมดที่ฉันรู้จักนั้นมาจากข้อมูลที่ไม่มีความสัมพันธ์กันมากนักตั้งแต่แรก: เอกสาร (เช่นเดียวกับในการค้นหาของ Google) โพสต์บล็อกบทความข่าวข้อมูลทางการเงิน .

ฉันคาดหวังว่าจะมีชุดข้อมูลที่แมปกับ SQL ได้ดีกว่าโมเดลเอกสารดังนั้นฉันจึงคิดว่า SQL จะอยู่รอดได้

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


9
มีประโยชน์มาก. โดยเฉพาะอย่างยิ่ง "SQL มีข้อมูลที่ไม่ยืดหยุ่นและแบบสอบถามที่ยืดหยุ่นฐานข้อมูลเอกสารเป็นอีกทางหนึ่ง" และการไม่มีการรวม
j_random_hacker

2
+1 นี่เป็นข้อมูลเชิงลึกมาก
Mas

2
จริงอยู่ฉันจะโหวตให้มากกว่าหนึ่งครั้งถ้าเป็นไปได้
Octavian A. Damiean

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

11

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

ยาก:

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

ง่ายขึ้น:

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

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

ฉันอยากเห็นฐานข้อมูล OO แบบเปิดที่ดีรวมเข้ากับ C # / Silverlight เพียงเพื่อให้ทางเลือกยากยิ่งขึ้น :)


1

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

ตัวอย่างเช่นโดยปกติคุณสามารถอ่านไฟล์ 10,000 ระเบียนและเรียงลำดับลงในฟิลด์ได้ภายในเวลาไม่ถึงครึ่งวินาทีซึ่งเป็นเวลาตอบสนองที่ยอมรับได้

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


1

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

อีกจุดหนึ่งที่ RDBM มีปัญหาคือการจัดการประวัติ / คีย์ขึ้นอยู่กับเวลา


3
สเตฟาน - คุณคิดถูกที่ระบบในโลกแห่งความจริงมักจะขาดในแผนกนอร์มัลไลเซชัน แต่มันไม่ถูกต้องที่จะบอกว่า RDBMses "เข้าร่วมไม่ดี"; ผลิตภัณฑ์เชิงพาณิชย์ส่วนใหญ่ (เช่น Oracle, MS SQL Server ฯลฯ ) มีเครื่องมือเพิ่มประสิทธิภาพการสืบค้นขั้นสูงและสามารถดำเนินการอัลกอริธึมการเข้าร่วมทางกายภาพที่แตกต่างกันได้อย่างหลากหลายเร็วกว่าการดำเนินการเดียวกันในโค้ดของแอปพลิเคชัน (MySQL เป็นข้อยกเว้นจากสิ่งที่ฉันเข้าใจ) จากประสบการณ์ของฉันการทำให้เป็นปกติก่อนกำหนดก็เหมือนกับการเพิ่มประสิทธิภาพก่อนกำหนดอื่น ๆ ซึ่งมักเป็นสัญญาณของนักพัฒนาที่ไม่ดี
Ian Varley

2
สานต่อความคิดนี้: การเข้าร่วมที่ไม่ดีเป็นผลมาจากการจัดทำดัชนีและสถิติที่ไม่ดี หากเครื่องมือเพิ่มประสิทธิภาพไม่มีอะไรที่จะทำงานร่วมกับหรือข้อมูลเกี่ยวกับสิ่งที่มันล้าสมัยก็จะทำให้ตัวเลือกไม่ดี ผิดพลาดหลายครั้งสำหรับ "การเข้าร่วมที่ไม่ดี" ระบบ RDBM สมัยใหม่มีการปรับแต่งด้วยตนเองซึ่งปิดบังความจำเป็นในการใช้สมองของคุณเมื่อตั้งค่าดัชนีและสถิติ นอกจากนี้ผู้คนยังสับสนระหว่างสคีมาเชิงตรรกะ (รูปแบบปกติที่ห้า) และสคีมาทางกายภาพ (มักเปลี่ยนสภาพเป็นปกติที่สาม) เพียงเพราะฐานข้อมูลที่คุณเห็นนั้น "กว้าง" ไม่ได้หมายความว่าได้รับการออกแบบมาอย่างสมเหตุสมผล
Godeke
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.