Giả sử bạn có bảng miaia được sao chép trên các nút A và B. Nếu trên nút C, không chứa bản sao của bảng, tôi làm mnesia:change_config(extra_db_nodes, [NodeA, NodeB])
và sau đó trên nút CI làm mnesia:dirty_read(user, bob)
cách nút C chọn bản sao của nút nào của bảng để thực hiện truy vấn trên?Trong một cụm Mnesia, nút nào được truy vấn?
Trả lời
Theo câu trả lời nghiên cứu của riêng tôi cho câu hỏi là - nó sẽ chọn nút được kết nối gần đây nhất. Tôi sẽ biết ơn vì đã chỉ ra các lỗi nếu tìm thấy - chứng mất trí là một hệ thống thực sự phức tạp!
Khi Dan Gudmundsson pointed out trên thuật toán danh sách gửi thư của lựa chọn nút từ xa đến truy vấn được xác định trong mnesia_lib:set_remote_where_to_read/2
. Đó là sau
set_remote_where_to_read(Tab, Ignore) ->
Active = val({Tab, active_replicas}),
Valid =
case mnesia_recover:get_master_nodes(Tab) of
[] -> Active;
Masters -> mnesia_lib:intersect(Masters, Active)
end,
Available = mnesia_lib:intersect(val({current, db_nodes}), Valid -- Ignore),
DiscOnlyC = val({Tab, disc_only_copies}),
Prefered = Available -- DiscOnlyC,
if
Prefered /= [] ->
set({Tab, where_to_read}, hd(Prefered));
Available /= [] ->
set({Tab, where_to_read}, hd(Available));
true ->
set({Tab, where_to_read}, nowhere)
end.
Vì vậy, nó được danh sách các active_replicas (tức là danh sách các ứng cử viên), tùy co lại danh sách để làm chủ các nút cho bảng, loại bỏ bảng để được bỏ qua (vì lý do bất kỳ), co lại danh sách để hiện kết nối các nút và sau đó chọn theo thứ tự sau:
- Đầu tiên phi
disc_only_copies
- Bất kỳ nút sẵn
các phần quan trọng nhất trong thực tế là danh sách của active_replicas
, vì nó xác định thứ tự các nút trong danh sách các ứng cử viên.
Danh sách active_replicas
được hình thành bởi các cuộc gọi từ xa của mnesia_controller:add_active_replica/*
từ các nút mới được kết nối với các nút cũ (có nghĩa là mật mà là trong cụm trước đó), mà nắm để chức năng add/1
mà thêm mục là người đứng đầu danh sách.
Do đó, câu trả lời cho câu hỏi là - nó sẽ chọn nút được kết nối gần đây nhất.
Ghi chú: Để kiểm tra danh sách các bản sao hoạt động trên các nút cho bạn có thể sử dụng này (bẩn hack) mã:
[ {T,X} || {{T,active_replicas}, X} <- ets:tab2list(mnesia_gvar) ].
Vâng, nút C sẽ cần liên hệ với nút A hoặc nút B để thực hiện truy vấn. Vì vậy, nút C sẽ phải tự quyết định bản sao bảng nào để thực thi truy vấn.
Nếu bạn cần thứ gì đó hơn bạn cần có một số thuật toán sẽ quyết định nút nào truy vấn, hoặc thậm chí sao chép bảng trên nút C (điều này thường phụ thuộc vào loại đặc điểm bạn muốn/cần).
Nếu nút A và nút B tạo thành hoặc là một phần của cụm cơ sở dữ liệu, khởi đầu tốt có thể là thuật toán xoay vòng (hoặc ngẫu nhiên, như bạn đề xuất).
- 1. Truy cập nút Mnesia từ một vỏ Erlang khác trong khi nó đang chạy
- 2. Solr: truy vấn cụm từ chính xác với một EdgeNGramFilterFactory
- 3. Bàn Mnesia rất lớn trong sản xuất
- 4. Akka: Cách tìm các nút hiện tại trong một cụm?
- 5. Elastic Truy vấn Tìm kiếm - Cụm từ với không gian
- 6. Cụm từ thông dụng để tìm tất cả các tên bảng trong một truy vấn
- 7. Solr - làm nổi bật cụm từ truy vấn
- 8. Merge truy vấn vào một truy vấn
- 9. Chạy nhiều nút cassandra (một cụm) từ cùng một máy?
- 10. Chỉ chạy tác vụ @Scheduled trên một nút cụm WebLogic?
- 11. Best erlang trong bộ nhớ cache hệ thống qua các nút mạng = mnesia?
- 12. Một số nút cassandra trong cụm không thể truy cập được ngay cả tất cả các nút đều đang hoạt động
- 13. Nút di chuyển và tên nút làm gì trong một cụm?
- 14. Erlang: Mnesia hoặc Mysql?
- 15. Có cách nào đơn giản để truy vấn con của một nút?
- 16. Cách bật tính năng mờ cho các truy vấn cụm từ trong Tìm kiếm Đàn hồi
- 17. Singleton toàn cụm trong cụm Websphere
- 18. Làm thế nào để chạy một phương pháp theo lịch trong một cụm cho một nút và cho tất cả?
- 19. Làm thế nào để "tên" một truy vấn trong postgres
- 20. Một truy vấn lớn so với nhiều truy vấn nhỏ?
- 21. LISTEN thời gian chờ truy vấn với nút-postgres?
- 22. Chọn hai số trong một truy vấn
- 23. Lưu nhiều hàng trong một truy vấn
- 24. InvalidCastException trong một truy vấn LINQ
- 25. Yêu cầu chi tiết về nút cạnh trong cụm
- 26. cụm nút với socket.io và expressjs
- 27. Để có được thời gian thực hiện truy vấn MYSQL trong Truy vấn
- 28. Làm thế nào để sử dụng select_for_update để 'có được' một truy vấn trong Django?
- 29. Kết hợp Truy vấn Phạm vi Số với Truy vấn Thời hạn trong Lucene
- 30. Id danh sách trong truy vấn nhóm
Kiểm tra bài viết của tôi, tôi không chắc chắn cách này sẽ áp dụng đối với những gì tôi hỏi. Tôi có thể làm một truy vấn trên nút C mà không có một đặc tả địa điểm, vậy làm thế nào nó chọn bảng sao chép để sử dụng? – ryeguy
Không nhận được rằng các nút thực sự đã có bảng trong lược đồ của nó. Xin lỗi, tôi xấu! –