Làm thế nào để tôi biết dữ liệu của mình là quan hệ hoặc hướng đối tượng trong tự nhiên?


16

Chỉ cần đọc những dòng này-

  • Nếu dữ liệu của bạn là đối tượng trong tự nhiên, thì hãy sử dụng kho lưu trữ đối tượng ("NoQuery"). Chúng sẽ nhanh hơn nhiều so với cơ sở dữ liệu quan hệ.

  • Nếu dữ liệu của bạn có bản chất quan hệ, thì chi phí cơ sở dữ liệu quan hệ là xứng đáng.

từ-

http://seldo.com/weblog/2011/06/15/orm_is_an_antipotype

Vì vậy, làm thế nào để tôi biết liệu dữ liệu của tôi có liên quan về bản chất hay hướng đối tượng?


Hãy cho chúng tôi biết thêm về dữ liệu của bạn ...
Thất vọngWithFormsDesigner

7
@FrustratedWithFormsDesigner Tôi nghĩ rằng anh ấy đang tìm kiếm hướng dẫn chung.
C. Ross

Dòng nói về "kho lưu trữ khóa-giá trị sẽ cho phép bạn giữ các cấu trúc dữ liệu độc lập, thanh lịch với số lượng lớn và truy cập chúng với tốc độ cực nhanh" dường như mô tả dữ liệu "đối tượng" nên được sử dụng trong NoQuery - về cơ bản là nghe có vẻ như các khối dữ liệu "khép kín" không có tham chiếu hoặc quan hệ với các khối dữ liệu khác ... Tôi không thể đưa ra ví dụ hay về điều này bởi vì đó không phải là thứ tôi đã từng làm việc với (ít nhất là không phải trong bối cảnh này) .
Thất vọngWithFormsDesigner

Chỉ cần có liên kết này. Hy vọng nó có gợi ý để trả lời- highscalability.com/blog/2011/6/15/
Gulshan

Câu trả lời:


16

Có nguy cơ bị bắn thành từng mảnh, tôi sẽ thử một định nghĩa tiếng Anh đơn giản.

"Bản chất quan hệ" đối với tôi dịch là: tất cả các mục thuộc một loại cụ thể có khá nhiều thuộc tính giống nhau, điều này giúp dễ dàng thiết kế một bảng đơn giản, nhưng tất cả các mục vào bảng đó và sau đó SQL để thực hiện CRUD và truy xuất. Ngoài ra, nếu dữ liệu của bạn có thể được mô hình hóa sao cho tất cả các mục có một trong các loại hạn chế, thì bạn có thể xác định cấu trúc dữ liệu quan hệ tương ứng với nhóm loại này.

"Bản chất đối tượng" dịch thành: Các mặt hàng thuộc loại tương tự có thể có nhiều thuộc tính khác nhau và các thuộc tính này có thể có nhiều loại về bản chất và loại. Rất thường điều này có thể (với đủ nỗ lực) được chuyển thành mô hình quan hệ, nhưng rất nhiều bảng sẽ rất ít dân cư và bạn sẽ kết thúc với việc tham gia LEFT OUTER rất kém hiệu quả, khiến cho hiệu năng của cơ sở dữ liệu quan hệ bị chậm lại khi so sánh đến cơ sở dữ liệu NOSQL.

Tôi phải nói rằng theo quan điểm của tôi, không có ranh giới nghiêm ngặt ngăn cách hai điều này. Bạn có thể có thể tìm thấy bất kỳ số lượng ví dụ rơi vào bất cứ đâu giữa hai thái cực.

OK, vì vậy bây giờ tôi đã mở ra cho mình những tay súng bắn tỉa từ mọi hướng. Mọi ý kiến ​​hoan nghênh. Hãy xem liệu chúng ta có thể cải thiện định nghĩa này cùng nhau không.


1
Trên thực tế là một người ban đầu chế giễu sự đơn giản của câu hỏi, tôi phải nói bravo cho một câu trả lời dễ hiểu và sâu sắc. Bạn nên nhìn vào viết sách.
Philip

Chúng ta có thể tóm tắt điều này để "có quá nhiều THAM GIA TRÁI PHIẾU trong thiết kế quan hệ" hay không?
Gul Sơn

Tôi sẽ do dự để thực hiện một đơn giản hóa như vậy. Đây là một trong những triệu chứng, nhưng không phải là triệu chứng duy nhất.
wolfgangsz

Một chút ví dụ xin vui lòng?
Gul Sơn

Giả sử bạn lưu trữ thông tin về mọi người. Bất kỳ một người nào cũng có thể có bất kỳ sự kết hợp các thuộc tính nào từ một bộ 300. Tất cả chúng có thể xuất hiện nhiều lần hoặc không. Một số trong số chúng bao gồm các kết hợp thuộc tính khác, tức là chúng là các tập hợp. Và bây giờ bạn muốn tìm kiếm tất cả mọi người trong đó một thuộc tính cụ thể không có hoặc không có giá trị nhất định. Đó là thứ sẽ khiến người xây dựng truy vấn SQL bình thường của bạn phát điên.
wolfgangsz

5

Dữ liệu là cả hai.

(nói đúng ra nó không thể là đối tượng trong tự nhiên vì nó thiếu hành vi, nhưng chúng tôi sẽ không bị tấn công).

Các quyết định về việc lưu trữ dữ liệu trong cơ sở dữ liệu RDBMS hoặc NoQuery phụ thuộc nhiều hơn vào cách bạn định sử dụng dữ liệu , thay vì "bản chất" thực sự của chính dữ liệu.

Nếu bạn có ý định hỗ trợ tất cả các loại đường dẫn điều hướng đến dữ liệu, thì bạn có thể muốn lưu trữ dữ liệu trong RDBMS vì bạn sẽ có các cách khác nhau để truy cập và trình bày dữ liệu. Bạn cần cơ sở dữ liệu để thực hiện rất nhiều công việc nặng nhọc cho bạn. Ví dụ: dữ liệu 'Đặt hàng' có thể được truy cập thông qua khách hàng, nhân viên bán hàng, sku (mặt hàng), ngày, khu vực, v.v.

Mặt khác, nếu bạn có đường dẫn điều hướng tối thiểu, bạn có thể chỉ lưu trữ toàn bộ đối tượng. Ví dụ: 'Rổ' chỉ được truy cập bởi giao diện người dùng web và không được lưu trữ lâu hoặc được phân tích nhiều, có thể phù hợp hơn với cửa hàng NoQuery. Sự hy sinh mà bạn thực hiện với (tài liệu hoặc giá trị khóa) Lưu trữ dữ liệu NoQuery là bạn không có mối quan hệ giữa các bộ sưu tập - nếu bạn không cần các mối quan hệ đó (đối với các đường dẫn điều hướng, truy vấn đặc biệt hoặc báo cáo) và chăm sóc chúng trong ứng dụng, sau đó bạn sẽ ổn thôi.

Tất nhiên, bạn có thể lưu trữ dữ liệu ở cả hai vì những lý do khác nhau, nhưng điều đó có nhược điểm riêng.


2

Dữ liệu không phải là "đối tượng trong tự nhiên" hay "quan hệ trong tự nhiên". Bất kỳ loại dữ liệu nào cũng có thể được biểu diễn trong cả cấu trúc biểu đồ / mô hình đối tượng. Điều gì là phù hợp phụ thuộc vào cách dữ liệu sẽ được sử dụng bởi các ứng dụng. Thường thì bạn thậm chí có thể có cả hai. Ví dụ, dữ liệu được sử dụng trên một trang web có thể được lưu trữ trong cơ sở dữ liệu quan hệ, nhưng theo yêu cầu được tải vào cấu trúc biểu đồ, sau đó được lưu trong bộ lưu trữ giá trị khóa trong bộ nhớ.

Câu lệnh lưu trữ đối tượng / NoSql sẽ nhanh hơn quan hệ đối với một số loại dữ liệu đơn giản là sai. Vấn đề là một lần nữa ứng dụng của bạn sử dụng dữ liệu như thế nào chứ không phải dạng dữ liệu. Một kho lưu trữ đối tượng sẽ nhanh hơn khi tải một biểu đồ đối tượng được lưu trữ dưới dạng một đơn vị, nhưng sẽ chậm hơn nhiều khi truy vấn đặc biệt trên nhiều đối tượng hoặc cập nhật các thuộc tính trên nhiều đối tượng.


0

Tôi nghĩ rằng dòng chính từ bài viết là:

"Likewise, sometimes the output will be a single object X, which is easy to represent. But sometimes the output will be a grid of aggregate data, or a single integer count"

Đối với tôi, có vẻ như tác giả đã nói rõ rằng nếu mã của bạn là ví dụ để lấy Số lượng khách hàng ở Tây Ban Nha một chút logic, bạn không nên đưa ra một danh sách khách hàng với tất cả các khách hàng ở Tây Ban Nha và sau đó đếm các đối tượng khách hàng. (mà một ORM có thể đẩy bạn về phía trước)

Rõ ràng bạn không thể nói từ chính cấu trúc dữ liệu khách hàng liệu nó sẽ được sử dụng như thế. vì vậy tôi nghĩ rằng chúng ta nên diễn giải 'dữ liệu' có nghĩa là 'Tất cả thông tin được sử dụng bởi ứng dụng của bạn'. Nếu điều này bao gồm những thứ như tổng hợp hoặc 'Tất cả X liên quan đến Y' thì 'dữ liệu' của bạn không phù hợp với cách tiếp cận NoSql nguyên tử

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.