6

Tôi đang thiết kế và triển khai .Net ORM phải hỗ trợ cả Azure Storage (bảng, hàng đợi, blobs) và Lưu trữ AWS (EBS, SimpleDB, S3) và ẩn tất cả chi tiết triển khai phía sau giao diện chung . Mục tiêu thiết kế chính là sự đơn giản.Hướng dẫn thiết kế ORM của Azure/AWS

Một số công việc đã được thực hiện trong http://www.cs.virginia.edu/~humphrey/papers/CSAL.pdf, nhưng theo ý kiến ​​của tôi, quá chặt chẽ cùng với giao diện lưu trữ Azure/AWS và có khả năng bị hỏng. Ví dụ, tôi không quan tâm rằng tôi có thể tạo/xóa bảng, tôi chỉ cần lưu trữ một đối tượng của một số loại một cách hiệu quả nhất.

Vì vậy, tôi muốn yêu cầu bạn chia sẻ kinh nghiệm của bạn về chủ đề dưới dạng hướng dẫn (DO, CONSIDER, AVOID, DO NOT). Tôi thực sự sẽ đánh giá cao bất kỳ cái nhìn sâu sắc bắt đầu với các nguyên tắc chung của thiết kế ORM và kết thúc với mức trừu tượng chính xác có khả năng cuối cùng xem xét các đường tiến hóa có thể xảy ra nhất của Azure và AWS.

+1

"nhiều khả năng cuối cùng xem xét các đường tiến hóa có thể xảy ra nhất của Azure và AWS" - làm cách nào để mọi người có thể biết điều đó? – millimoose

+0

Đúng vậy, chúng tôi không thể biết chắc chắn. Dự đoán tốt nhất là đủ. – andriys

Trả lời

1

Nếu bạn thực sự muốn tránh khớp nối chặt chẽ, tôi đề nghị bạn chỉ cần triển khai và lớp trừu tượng ở trên cùng của bộ tính năng tối thiểu có sẵn trên cả hai loại bộ nhớ.

Nhưng dù sao, những gì bạn đang cố gắng làm không thực sự hợp lý với tôi. Lưu trữ đám mây (không quan hệ) rất đặc biệt khi cố gắng xây dựng một ORM chung sẽ là một thất bại khổng lồ. Các ORM SQL hiện đại là "tốt" vì RDBMS tất cả đều có một bộ tính năng tối thiểu được chia sẻ thực sự khá rộng lớn và trong hầu hết các trường hợp, bạn không cần những thứ kỳ lạ. Với lưu trữ đám mây, mỗi triển khai gần như là duy nhất, chính xác vì khía cạnh đầu tiên cần ghi nhớ là khả năng mở rộng. Ví dụ, nếu bạn vứt Blob cho thuê ở Azure bởi vì ở Amazon chúng không tồn tại (tôi không biết, tôi chỉ làm ví dụ), có lẽ bạn sẽ gặp khó khăn trong việc quản lý truy cập đồng thời blob ở Amazon và trong Azure quá, và điều đó không có ý nghĩa. Tôi muốn thử triển khai một lớp truy cập dữ liệu được thiết kế hợp lý để tránh các vấn đề nhưng tận dụng TẤT CẢ các tính năng sẵn có trong cả hai nền tảng (với các triển khai rất khác nhau nếu cần thiết).

+0

Nó thực sự có ý nghĩa đối với tôi. Tôi đang xây dựng API này để giải quyết cơ hội trở ngại của Cơ sở dữ liệu máy tính/xung đột về Khóa dữ liệu được mô tả trong phần 2 trong [Trên mây: Chế độ xem điện toán đám mây của Berkeley] (http://www.eecs.berkeley.edu/Pubs/TechRpts /2009/EECS-2009-28.pdf). Vì vậy, tôi hiểu bạn một cách chính xác mà bạn đang đề xuất: 1. quên xây dựng ORM chung vì nó là 99% xác suất thất bại. 2. triển khai hai API khác nhau cho Azure và AWS và sử dụng toàn bộ tính năng của từng API? – andriys

+0

Vâng đó là ý của tôi. Cô lập các tính năng cấp cao phía sau giao diện và triển khai hai phiên bản, mỗi phiên bản sử dụng tất cả các tính năng có sẵn của mỗi nền tảng. Có lẽ việc xây dựng một ORM chính thức là quá mức cần thiết nếu bạn chỉ có thể nhắm mục tiêu 2 loại lưu trữ. –

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