2010-03-04 4 views
6

Có cách nào để ghi cục bộ và đọc toàn cầu (mà không cần sao chép) bằng cách sử dụng chứng mất trí. Ví dụ: nút A ghi vào DB cục bộ của nó và nút B đọc từ DB của nút A. Nút B không có bất kỳ dữ liệu nào của riêng nó, ngoài thông tin lược đồ được lưu trữ cục bộ.Mất trí nhớ: đọc dữ liệu nút từ xa ở chế độ {local_content, true}

Theo tài liệu, {local_content, true} có vẻ như những gì tôi cần sử dụng, nhưng tôi đã không thành công khi cố gắng để nút B đọc dữ liệu của nút A.

My lược đồ và bảng cấu hình cái nhìn như thế này:

On nodeA @ IP1:

net_adm:ping('[email protected]'). 
    rd(user, {name, nick}). 
    mnesia:create_schema([node()|nodes()]). 
    mnesia:start(). 
    mnesia:create_table(user, [ {local_content, true}, 
           {disc_copies, [node()]}, 
           {attributes,record_info(fields, user) }]). 

%% insert data and list rows on nodeA 
%% WORKS 

On NodeB @ IP2:

mnesia:start(). 
    %% code to list rows from user table on nodeA 
    %% throws an ERROR saying table does not exist. 

là cấu hình sai hoặc điều này có thể được thực hiện theo bất kỳ cách nào khác?

+0

Quyền truy cập vào bảng local_content sẽ được thực hiện cục bộ. Làm cho câu hỏi này không hợp lệ. – Abhijith

Trả lời

1

Tôi không nghĩ bạn có thể làm theo cách bạn đề cập. Một cách khác để thực hiện nó có thể là thực hiện cuộc gọi rpc đến nút A và nhận dữ liệu theo cách đó. Không có điểm trong việc sử dụng mnesia để đọc từ nút B bởi vì về cơ bản nó sẽ chỉ làm một RPC.

Vì vậy, nút B nên:

rpc:call([email protected], mnesia, read, ....). 

Hy vọng điều này là những gì bạn [hơi] nhu cầu.

EDIT: Ồ và tôi quên đề cập đến việc bạn không cần lược đồ trên cả hai nút để làm việc này. Đây là giả định rằng Node B không thực sự quan tâm đến việc chia sẻ bất kỳ dữ liệu nào khác với Node A, nó chỉ đọc nó; Nói cách khác, chỉ cần giữ tất cả các công cụ mất trí nhớ trên nút A và chỉ thực hiện các cuộc gọi RPC từ Node B.

+0

Đúng. Tài liệu nói, truy cập vào bảng local_content nên được thực hiện cục bộ. Vì vậy, tôi nghĩ câu hỏi của tôi là tranh luận. – Abhijith

0

Bạn có thể cần phải thêm nút B vào điều khoản cấu hình extra_db_nodes của lược đồ. Bạn không cần phải làm điều đó nếu nó là một db dựa trên đĩa, nhưng trong RAM nó là bắt buộc để làm cho nó làm những gì bạn muốn.

Không chắc chắn về các chi tiết cụ thể, tôi có thể khó hiểu khi đặt nội dung. Tôi không quá kinh nghiệm với chứng mất trí, nhưng các tài liệu chỉ ra rằng bạn nên làm điều này.

+0

Cảm ơn. Tôi sẽ thử và xem những gì tôi nhận được. – Abhijith

+0

extra_db_nodes không hữu ích. Cảm ơn bạn. – Abhijith