Các vấn đề ORM không chặn


9

Tôi đã hỏi một câu hỏi về SO và thấy rằng không có ORM nào không chặn cho khung web yêu thích của tôi. Bằng cách không chặn, tôi có nghĩa là một ORM có hỗ trợ gọi lại để truy xuất không đồng bộ. ORM sẽ được cung cấp với một cuộc gọi lại hoặc một số như vậy để thực thi khi dữ liệu đã được nhận.

Tôi muốn tạo một cái, nhưng tôi có một số câu hỏi ngăn tôi bắt đầu phát triển:

  • Những vấn đề có thể gặp phải khi phát triển ORM?
  • Việc hỗ trợ truy xuất không chặn có làm tăng đáng kể độ phức tạp của ORM không?
  • Tại sao có rất ít ORM không chặn xung quanh?

Cập nhật: Có vẻ như tôi phải cải thiện câu hỏi của mình. Chúng tôi có các giải pháp đã cho phép chúng tôi nhận dữ liệu theo cách không chặn và tôi tin rằng hầu hết các công ty sử dụng các giải pháp đó đều sử dụng SQL thô. Chúng tôi muốn tạo ra một giải pháp chung chung hơn mà chúng tôi có thể sử dụng lại trong các dự án trong tương lai. Những khó khăn chúng ta có thể gặp phải?

Cập nhật 2: Ngôn ngữ ưa thích là python, nhưng tôi quan tâm đến các nguyên tắc. Câu hỏi này thực sự dành cho tôi, vì tôi sẽ xem xét các nền tảng đã có ORM không chặn.


2
"ORM không chặn là gì?" Làm thế nào bạn có thể hiển thị dữ liệu trước khi bạn nhận được nó?
Robert Harvey

6
@RobertHarvey: thực sự truy xuất không đồng bộ âm thanh khá tốt. ORM sẽ được cung cấp với một cuộc gọi lại hoặc một số như vậy để "kích hoạt" khi dữ liệu đã được nhận. Mặt khác, ORM của bạn cần được phân chia thành một luồng riêng biệt để đảm bảo đáp ứng UI.
Marjan Venema

@MarjanVenema, vâng, tôi muốn ORM có hỗ trợ gọi lại.
Nikolay Fominyh

1
Vậy tại sao không sử dụng các cuộc gọi lại không đồng bộ với ORM đồng bộ yêu thích của bạn? stackoverflow.com/q/1239035
Robert Harvey

@RobertHarvey, vì ORM đồng bộ chặn máy chủ không đồng bộ.
Nikolay Fominyh

Câu trả lời:


2

Những vấn đề có thể gặp phải khi phát triển ORM?

Bạn sẽ cần giải quyết danh sách các vấn đề cần thiết để khắc phục sự không phù hợp Trở kháng quan hệ đối tượng , cũng như xử lý các đặc điểm riêng của SQL được cung cấp bởi mỗi nhà cung cấp RDBMS. Yêu cầu của bạn càng nâng cao, vấn đề của bạn sẽ càng tồi tệ hơn ở bộ phận này: ví dụ: SQL mà bạn tạo để thực hiện phân trang kết quả sẽ khác biệt đáng kể giữa Oracle, SQL Server và mysql. May mắn thay, điều này không khác nhau giữa việc triển khai ORM chặn và không chặn, vì vậy nếu có ORM mã nguồn mở cho Python, bạn có thể mượn rất nhiều từ nó để giải quyết gần như tất cả các vấn đề này.

Việc hỗ trợ truy xuất không chặn có làm tăng đáng kể độ phức tạp của ORM không?

Vấn đề lớn nhất mà bạn sẽ phải đối mặt là thư viện kết nối để truy cập RDBMS sẽ bị chặn. Đây là một sự khác biệt mà bạn phải giải quyết. Quản lý các chủ đề vô hình cho người dùng của bạn sẽ là thách thức bổ sung cho bạn. Ngoài ra, việc tải các phụ thuộc theo yêu cầu sẽ là một thách thức, bởi vì hoạt động được người dùng trong khung của bạn cảm nhận là đồng bộ: sau tất cả, họ thường không mong đợi thông báo khi nào có thể truy cập vào thuộc tính bộ sưu tập của đối tượng của họ.

Tại sao có rất ít ORM không chặn xung quanh?

Tôi chỉ có thể suy đoán về điểm cuối cùng này, nhưng tôi nghĩ rằng nó phải làm với nhu cầu thấp đối với các khung như vậy: vì bạn có thể mô phỏng một phần ORM không chặn bằng cách thêm một cấp độ luồng khác vào mã ứng dụng của bạn khi cần và giữ chặn thường xuyên loại ở mọi nơi khác, phát triển một khung chuyên biệt cho nó có vẻ không tối ưu.


Không chắc chắn, nếu câu trả lời cho câu hỏi này có thể tốt hơn. Cảm ơn.
Nikolay Fominyh

6

Bạn đã không nói ngôn ngữ nào bạn đang sử dụng vì vậy tôi sẽ giới thiệu Node.js và ORM cho ngôn ngữ đó: Node ORM , mọi thứ trong nút đều không đồng bộ, điều này không khác.


Câu hỏi cập nhật.
Nikolay Fominyh
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.