2015-02-17 15 views
15

Tôi đang cố gắng tìm ra cách xử lý tốt nhất các hoạt động cơ sở dữ liệu trong khi sử dụng hệ thống diễn viên. thực sự hoạt động cơ sở dữ liệu đang chặn trong khi chúng tôi cố gắng không chặn trong AKKA.AKKA Actor và DataBase Operation

Tôi đỏ trong doc chính mà một trong những cách để xử lý đó là tạo ra một một vũng diễn viên đằng sau một bộ định tuyến, có khả năng về một executionContext tách ra, mà sẽ xử lý truy cập cơ sở dữ liệu.

Vì vậy, tôi có các câu hỏi sau:

1 - Cơ sở dữ liệu có giữ kết nối luôn mở không?

2 - Cách hoạt động cùng với kết nối Kết nối như được cung cấp bởi nhiều cơ sở dữ liệu?

3 - Chúng ta sẽ kết hợp cả hai, và có DatabaseActors yêu cầu một kết nối mới từ hồ bơi mỗi khi họ được trưng cầu. Nếu không, không phải là nó giữ một kết nối mở ở tất cả các thời gian một điều xấu để làm gì?

4 - Ai đó có thể giải thích cho tôi điều tinh tế làm cho nó trở thành một cách tiếp cận tránh nạn đói. Ví dụ bằng cách sử dụng Play hoặc spray, việc xử lý yêu cầu là một nhiệm vụ không đồng bộ, tuy nhiên nếu nhiệm vụ đó cần truy cập cơ sở dữ liệu và chúng tôi gửi yêu cầu đến DatabaseActor, thì khối trên cơ sở dữ liệu Actor (nếu nó xảy ra) không gây ra, một khối trong nhiệm vụ không đồng bộ, dẫn đến nạn đói có thể xảy ra?

5 - Có chắc chắn 100% tài sản DB ACID đảm bảo sự an toàn của nhiều đọc và viết và do đó sẽ xảy ra trước khi mối quan hệ.

6 - Tôi đang sử dụng cơ sở dữ liệu ngữ nghĩa hay còn gọi là ba cửa hàng và làm cho nặng sử dụng khả năng lập luận ngữ nghĩa trong yêu cầu của tôi. Tôi cũng thực hiện rất nhiều quyền truy cập ghi, bất kỳ lời khuyên nào, liên quan đến các thông số điều chỉnh của số gộp và số diễn viên hoặc bối cảnh thực thi chuyên dụng?

nhất,

M

Trả lời

12

1 - Liệu các databaseActors giữ kết nối mở tất cả các thời gian?

diễn viên Akka là stateful ví dụ, bạn có thể an toàn cửa hàng nhà nước (trong trường hợp này kết nối DB) bên một diễn viên. Bạn có thể viết bạn sở hữu logic quản lý kết nối hoặc sử dụng logic được cung cấp bởi trình điều khiển cơ sở dữ liệu của bạn.

2 - Cách hoạt động cùng với kết nối Kết nối như được nhiều cơ sở dữ liệu cung cấp?

3 - Chúng ta sẽ kết hợp cả hai, và có DatabaseActors yêu cầu một kết nối mới từ hồ bơi mỗi khi họ được trưng cầu. Nếu không, không phải là nó giữ một kết nối mở ở tất cả các thời gian một điều xấu để làm gì?

Bạn có thể kết hợp cả hai. Có một diễn viên cho mỗi kết nối trong hồ bơi. Tại sao bạn nghĩ rằng có một kết nối còn sống là một điều xấu? Không phải là toàn bộ điểm có một hồ bơi kết nối là sử dụng lại tài nguyên (kết nối) và không phải trả giá tạo/phá hủy chúng mỗi lần.

4 - Ai đó có thể giải thích cho tôi điều tinh tế làm cho nó trở thành một cách tiếp cận tránh nạn đói.Ví dụ bằng cách sử dụng Play hoặc spray, việc xử lý yêu cầu là một nhiệm vụ không đồng bộ, tuy nhiên nếu nhiệm vụ đó cần truy cập cơ sở dữ liệu và chúng tôi gửi yêu cầu đến DatabaseActor, thì khối trên cơ sở dữ liệu Actor (nếu nó xảy ra) không gây ra, một khối trong nhiệm vụ không đồng bộ, dẫn đến nạn đói có thể xảy ra?

Nếu trình điều khiển cơ sở dữ liệu của bạn đang chặn thì bạn cuối cùng là cũng phải chặn. Thực hành được khuyến nghị là thực thi đoạn mã chặn này trong một nhóm ngữ cảnh/luồng thực thi riêng biệt. Hoặc nếu bạn có tùy chọn, hãy chọn một kho dữ liệu có trình điều khiển cơ sở dữ liệu tương tác (ví dụ: ReactiveMongo cho MongoDB) hoàn toàn không đồng bộ và không bị chặn.

5 - Có chắc chắn 100% tài sản DB ACID đảm bảo sự an toàn của việc đọc và ghi và do đó xảy ra trước khi mối quan hệ.

Tôi không hiểu ý bạn là gì.

6 - Tôi đang sử dụng cơ sở dữ liệu ngữ nghĩa còn được gọi là cửa hàng ba và sử dụng nhiều khả năng lý luận ngữ nghĩa trong yêu cầu của mình. Tôi cũng thực hiện rất nhiều quyền truy cập ghi, bất kỳ lời khuyên nào, liên quan đến các thông số điều chỉnh của số gộp và số diễn viên hoặc bối cảnh thực thi chuyên dụng?

Bạn chắc chắn nên sử dụng ngữ cảnh thực thi khác. Việc chuyển các tham số thực sự phụ thuộc vào cấu hình phần cứng của bạn và các chi tiết cụ thể khác của phần mềm của bạn (loại cơ sở dữ liệu, db từ xa và db nhúng, yêu cầu/giây, v.v.).

Tôi không nghĩ rằng có một kích thước phù hợp với tất cả khi nói đến người điều phối Akka. Đó là một nghệ thuật. Đề xuất duy nhất của tôi là đảm bảo rằng bạn không phải là chặn ở bất kỳ đâu trong số của bạn.

+0

Cảm ơn bạn đã làm rõ. – MaatDeamon

0

This blog post có một số điểm thực sự tốt tại sao không sử dụng diễn viên cho mỗi kết nối DB.

Cụ thể, điều đó có nghĩa là bạn cần quản lý cấp độ tương tranh thay vì để hồ bơi kết nối ban đầu xử lý nó cho bạn. Nó cũng có thể đánh lừa bạn để nghĩ rằng mã của bạn chạy song song trong khi trên thực tế mã của bạn chạy serially.