2010-12-27 38 views
19

Trong trang web MongoDB, họ viết rằng MonogDB là cơ sở dữ liệu hướng tài liệu, vì vậy nếu MongoDB không phải là một cơ sở dữ liệu hướng đối tượng, thì nó là gì? và sự khác biệt giữa cơ sở dữ liệu hướng đối tượng và tài liệu là gì?MongoDB hướng đối tượng?

Trả lời

2

Một tài liệu hướng là một khái niệm khác nhau để phản đối và cơ sở dữ liệu quan hệ. Một cơ sở dữ liệu tài liệu có thể hoặc không thể chứa trường, trong khi cơ sở dữ liệu quan hệ hoặc đối tượng mong đợi các trường bị thiếu được lấp đầy với một mục nhập rỗng.

Hãy tưởng tượng lưu trữ chuỗi XML hoặc JSON trong một trường đơn lẻ trên bảng cơ sở dữ liệu. Điều đó tương tự như cách một cơ sở dữ liệu tài liệu hoạt động. Nó chỉ đơn giản cho phép dữ liệu bán cấu trúc được lưu trữ trong một cơ sở dữ liệu mà không có nhiều trường rỗng.

3

Tài liệu hướng

  • Tài liệu (đối tượng) bản đồ độc đáo để ngôn ngữ lập trình kiểu dữ liệu
  • tài liệu và mảng Embedded giảm nhu cầu tham gia
  • động, đánh máy (schemaless) cho phát triển giản đồ dễ dàng
  • Không tham gia và không (đa đối tượng) giao dịch cho hiệu suất cao và dễ dàng khả năng mở rộng

(MongoDB Introduction)

Trong hiểu biết của tôi MongoDB đối xử với mọi hồ sơ duy nhất giống như một tài liệu bất kể đó là 1 lĩnh vực hoặc n lĩnh vực. Bạn thậm chí có thể có Tài liệu được nhúng bên trong Tài liệu. Bạn không cần phải xác định một lược đồ được kiểm soát chặt chẽ trong các hệ thống DB quan hệ khác (MySQL, PorgeSQL, v.v.). Tôi đã sử dụng MongoDB một thời gian và tôi thực sự thích triết lý của nó.

Hướng đối tượng là mô hình cơ sở dữ liệu trong đó thông tin được biểu diễn dưới dạng đối tượng được sử dụng trong lập trình hướng đối tượng (Wikipedia).

+0

một chút của một bình luận vào cuối ngày một cũ câu trả lời - nhưng sự hiểu biết của tôi cũng là bạn không thể thực sự thực thi các ràng buộc đối với các giao dịch kéo dài nhiều thực thể/tài liệu khác nhau. Ví dụ: một hoạt động ghi nợ từ tài khoản ngân hàng sau đó ghi có số tiền đó sang một tài khoản khác. –

12

Điều này có thể hơi trễ trả lời, nhưng chỉ nghĩ rằng nó đáng để chỉ ra, có sự khác biệt lớn giữa ODB và MongoDB.

Nói chung, trọng tâm của ODB là tham chiếu trong suốt (quan hệ) giữa các đối tượng trong một mô hình miền phức tạp thực sự mà không cần phải sử dụng và quản lý mã cho một thứ như DBRef. Thậm chí nếu bạn có vài nghìn lớp, bạn không cần phải lo lắng về việc quản lý bất kỳ khóa nào, chúng sẽ miễn phí và khi bạn tạo các thể hiện của 1000 lớp đó trong thời gian chạy, chúng sẽ tự động tạo lược đồ trong cơ sở dữ liệu. cho những thứ như một đối tượng tự tham chiếu với bộ sưu tập các bộ sưu tập.

Ngoài ra, giao dịch của bạn có thể mở rộng các tham chiếu này, do đó bạn không phải sử dụng mô hình được nhúng hoàn toàn.

Các khái niệm là các khái niệm được thừa hưởng trong các giải pháp ORM như JPA, vòng đời đối tượng được quản lý, được lấy từ không gian ODB, nhưng sự khác biệt HUGE là không có ánh xạ AT ALL trong ODB và các mối quan hệ được lưu trữ như một phần của cơ sở dữ liệu, do đó không có thời gian chạy JOIN để giải quyết các mối quan hệ, tất cả các mối quan hệ được giải quyết với cùng tốc độ như một cái nhìn b-tree. Đối với những người bạn của những người đã sử dụng Hibernate, hãy tưởng tượng Hibernate mà không có bất kỳ tập tin bản đồ và đơn đặt hàng của cường độ nhanh hơn bởi vì không có thời gian chạy JOIN đằng sau hậu trường.

Ngoài ra, ODB cho phép truy vấn trên bất kỳ mối quan hệ nào trong mô hình của bạn, do đó bạn không bị giới hạn truy vấn trong một bộ sưu tập cụ thể như bạn đang ở MongoDB. Tất nhiên, các chỉ mục băm/b-cây/tổng hợp được hỗ trợ để các truy vấn rất nhanh khi chúng được sử dụng.

Bạn có thể phát triển các cá thể của bất kỳ lớp nào trong ODB ở cấp lớp và khi chạy phiên bản lớp học chính xác được giải quyết. Khá khác với cách nó hoạt động trong MongoDB duy trì mã để quyết định cách xử lý các dạng blob (hoặc đối tượng giá trị) khác nhau do phát triển cơ sở dữ liệu lược đồ ít hơn ... hoặc viết mã để truy cập và thay đổi mọi đối tượng giá trị vì bạn muốn thay đổi giản đồ.

Theo như partioning, tôi nghĩ sẽ dễ dàng hơn nhiều khi quyết định mô hình phân vùng cho mô hình miền có thể nói chuyện qua các đối tượng arbitary, sau đó tìm ra chiến lược nhúng tất cả cho bộ sưu tập của bạn chứa các tài liệu trong MongoDB. Như một ví dụ vô lý, bạn có một Contact và một Address và một ShoppingCart và chúng có liên quan đến một tài liệu JSON và bạn quyết định phân vùng trên Contact bằng Contact_id. Hoàn toàn không có gì để giữ cho bạn khỏi việc xử lý 3 lớp đó chỉ là các đối tượng thay vì các tài liệu JSON và lưu trữ chúng với một phân vùng trên Contact_id giống như bạn làm với MongoDB. Tuy nhiên, nếu bạn có một Tài khoản đối tượng khác và bạn muốn quản lý những tài khoản đó theo cách không được nhúng vì một số hoạt động thanh toán tổng hợp được thực hiện trên tài khoản, bạn có thể miễn phí (không cần phải tạo mã cho loại DBRef) trong ODB ... và bạn có thể chọn phân vùng ngay cùng với Contact hoặc chọn lưu trữ các Tài khoản trong một nút vật lý hoàn toàn riêng biệt, nhưng tất cả sẽ được kết nối vào thời gian chạy trong không gian ứng dụng ... giống như ma thuật.

Nếu bạn muốn xem video thực sự thú vị về cách tạo ứng dụng với ODB cho thấy phân phối, di chuyển đối tượng, dung sai lỗi, tối ưu hóa hiệu suất .. xem này (nếu bạn muốn chuyển sang phần thú vị, hãy nhảy khoảng 21 phút và bạn sẽ tránh được việc xây dựng các ứng dụng và chỉ thấy cách dễ dàng là để thêm phân phối và khả năng chịu lỗi cho bất kỳ ứng dụng hiện tại):

http://www.blip.tv/file/3285543

+0

Cảm ơn bạn Robert vì câu trả lời của bạn, rất rõ ràng và hữu ích. – Amer

Các vấn đề liên quan