Khi nào bạn nên sử dụng một tài liệu so với quan hệ so với cơ sở dữ liệu đồ thị? [đóng cửa]


29

Đối với mục đích thảo luận, hãy xem xét một kịch bản FourSapes.

Kịch bản

Các thực thể:

  • Người dùng
  • Nơi

Các mối quan hệ:

  • Checkins: người dùng <-> địa điểm, nhiều đến nhiều
  • Bạn bè: người dùng <-> người dùng, nhiều đến nhiều

Thiết kế cơ sở dữ liệu

Đây rất có thể sẽ có lỗi, xin vui lòng chỉ ra chúng.

RDBMS

Những cái bàn:

  • Người dùng
  • Nơi
  • Checkins (ngã ba)
  • Bạn bè (ngã ba)

Ưu điểm:

  • CAP: tính nhất quán, sẵn có

Nhược điểm:

  • CAP: dung sai phân vùng, còn gọi là shending
  • sơ đồ = cấu trúc không linh hoạt
  • nhân rộng kém?

Đồ thị

Các đối tượng:

  • Người dùng
  • Nơi

Các cạnh:

  • Bạn bè: Người dùng <-> Người dùng
  • Đăng ký: Người dùng -> Địa điểm
    • chứa dấu thời gian

Ưu điểm:

  • CAP: tính nhất quán, sẵn có?
  • schemaless, các đối tượng và các cạnh dễ dàng thay đổi
  • biểu đồ truy vấn ngang, ví dụ:
    • phân cụm
      • tìm nhóm bạn
      • tìm nhà hàng thích bởi những người tương tự
    • bất kỳ truy vấn phổ biến / hữu ích khác?

Nhược điểm:

  • CAP: dung sai phân vùng?

Tài liệu / Đối tượng

3 cơ sở dữ liệu riêng biệt?

  • Người dùng
    • danh sách bạn bè
  • Checkin
    • dấu thời gian
    • người sử dụng
    • địa điểm
  • Nơi

Ưu điểm:

  • CAP: sẵn có, dung sai phân vùng
  • schemaless, đối tượng dễ biến đổi

Nhược điểm:

  • CAP: tính nhất quán

Câu hỏi

Đối với hồ sơ, họ đã kết thúc bằng MongoDB. Ngoài tất cả những dấu hỏi ở trên:

  1. Tôi không chắc làm thế nào để thực hiện một cơ sở dữ liệu tài liệu.
  2. Làm thế nào để cơ sở dữ liệu tài liệu đạt được dung sai phân vùng?
  3. Để có được một lần đăng nhập của người dùng, tôi giả sử thao tác sẽ phân tích tất cả các lần đăng nhập và lọc siêu dữ liệu cho tên người dùng (map + filter). Hiệu suất phân tích hơn 1.000.000 tài liệu cho mỗi người dùng sẽ cực kỳ kém. Tôi cho rằng đây không phải là hành vi chính xác?
  4. Những pro / cons khác là gì?

(1) Bạn cần đánh vần tính thực tế giữa 2 bảng trong thuật ngữ kinh doanh. Điều này là do có thể có các mối quan hệ song song. Ví dụ: người dùng <-> người dùng không ngụ ý mối quan hệ 1 mm. Nó có thể có nghĩa nhiều hơn 1. Ví dụ: Một người dùng thích một người dùng khác và một người dùng ghét một người dùng khác. Đây là 2 mối quan hệ. (2) Sẽ hữu ích nếu bạn có thể tóm tắt những gì bạn muốn "chính xác".
NoChance

@EmmadKareem: (1) Tôi không muốn làm phức tạp kịch bản. Mối quan hệ người dùng duy nhất <-> mà tôi quan tâm là một tình bạn chung, là mối quan hệ nhiều đến nhiều. (2) Tôi muốn 4 câu hỏi được liệt kê ở cuối bài trả lời.
wting

Câu trả lời:


13

Câu hỏi của bạn có thể là chủ đề của một khóa học đại học kéo dài một học kỳ. Bạn cần chia nó thành các phần có thể quản lý được. Như vậy, tôi sẽ chỉ đưa ra một số câu trả lời một phần.

Một trong những điều đầu tiên cần xem xét khi quyết định sử dụng loại cơ sở dữ liệu nào là loại truy vấn nào bạn sẽ chạy và liệu bạn có biết tất cả chúng trước khi tạo cơ sở dữ liệu hay không. Cơ sở dữ liệu SQL có lợi thế của các truy vấn mạnh mẽ và linh hoạt trên tất cả các dữ liệu trong cơ sở dữ liệu. Cơ sở dữ liệu đồ thị có khả năng truy vấn chuyên môn cao làm cho chúng tốt nhất cho dữ liệu đồ thị và thực sự xấu cho dữ liệu phi đồ thị (mặc dù cơ sở dữ liệu đồ thị có thể là thành phần trong cơ sở dữ liệu SQL). Cơ sở dữ liệu NoQuery bị hạn chế hơn nhiều về khả năng truy xuất và vận hành trên dữ liệu.

Tiếp theo là cách bạn cảm nhận về các thuộc tính ACID: Nguyên tử, Tính nhất quán, Cách ly và Độ bền. Cơ sở dữ liệu SQL cung cấp sự bảo đảm mạnh mẽ về tất cả 4. Cơ sở dữ liệu NoQuery thường không hứa hẹn cho cả 4 và cách chúng khởi hành là một trong những khác biệt chính giúp phân biệt các triển khai cơ sở dữ liệu NoQuery khác nhau. Mặt khác, không thể đảm bảo tính nhất quán và tính khả dụng khi đối mặt với phân vùng (xem phần ngực của nhà sản xuất bia ), do đó, không có cơ sở dữ liệu SQL nào sẽ làm nếu bạn nhấn mạnh vào Tính khả dụng đầy đủ khi đối mặt với phân vùng. Cá nhân, tôi quan tâm rất nhiều về Độ bền của dữ liệu trong cơ sở dữ liệu, vì tôi thường làm việc với dữ liệu trong đó thậm chí mất 0,0001% dữ liệu là không thể chấp nhận được và các bộ dữ liệu đủ nhỏ để tôi không phải lo lắng về các phân vùng, vì vậy tôi rất ủng hộ cơ sở dữ liệu SQL.

Một cân nhắc rất thực tế khác là chất lượng mã máy chủ, tính khả dụng của quản trị viên cơ sở dữ liệu và lập trình viên, chất lượng hỗ trợ có sẵn cho các vấn đề phát sinh, chất lượng và tính sẵn có của các thư viện giao diện để kết nối ứng dụng của bạn với cơ sở dữ liệu, v.v. MySQL đã tồn tại được gần 2 thập kỷ, có phần lớn các lỗi đã được xử lý, được sử dụng rất rộng rãi và vì vậy có cả sự hỗ trợ tuyệt vời và sự sẵn có lớn về nhân sự, và có khả năng sẽ được hỗ trợ trong 10 năm tới. Bạn không thể nói bất cứ điều gì về Rịa.

Lưu ý rằng mặc dù Google thực tế đã phát minh ra cơ sở dữ liệu NoQuery để họ có thể lưu trữ phiên bản được lưu trữ và lập chỉ mục của toàn bộ web trên toàn thế giới, họ vẫn sử dụng MySQL cho một số thứ.


1
Tôi nhận ra rằng tôi đã hỏi rất nhiều, vì vậy một câu trả lời chung chung sẽ ổn. Các câu hỏi cốt lõi là: (1) Tại sao nên sử dụng cơ sở dữ liệu tài liệu cho việc bảo vệ tuyệt vời khi bạn có thể triển khai shending theo chiều ngang trong logic bằng cách sử dụng shending phạm vi? .
wting

1
@William, có hàng tá bài viết trả lời câu hỏi của bạn dễ dàng truy cập qua Google. Thậm chí một số trên Stack Overflow một mình. Làm bài tập về nhà đi.
Old Pro
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.