2016-12-12 12 views
6

Tôi đang phát triển một dịch vụ web với Erlang. Độ trễ thấp là mục tiêu. Dịch vụ cung cấp một số chế độ xem của một tập hợp các tệp. Việc xây dựng các lượt xem này cần có thời gian, vì tôi phải đọc trong các tệp, phân tích cú pháp chúng dưới dạng CSV, lưu trữ các trường của chúng trong hồ sơ, v.v.Erlang: thiết kế một thành phần dịch vụ không thay đổi được nhưng chậm để bắt đầu

Cách tiếp cận ngây thơ là đọc lại các tệp này và thực hiện các biến đổi cần thiết cho mọi yêu cầu, vì vậy ứng dụng web hoàn toàn không có quốc tịch. Nhưng tôi lo ngại về độ trễ.

Một cách tiếp cận khác là tạo máy chủ (thực hiện hành vi gen_server) chuẩn bị các chế độ xem này lúc khởi động và lưu trữ chúng trong bộ nhớ dưới dạng LoopData, sau đó trả lại lượt xem khi cần thiết cho nhân viên web. Nhưng điều này làm giảm đồng thời, vì máy chủ này xử lý một yêu cầu tại một thời điểm.

Có mẫu thiết kế nào trong Erlang hỗ trợ thực hiện khởi tạo đắt tiền khi khởi động và cho phép truy cập đồng thời vào dữ liệu được khởi tạo không? (Điều quan trọng là rằng dữ liệu này là không thay đổi, vì vậy tôi không quan tâm về loại trừ lẫn nhau.)

+2

Bạn đã thử giải pháp gen_server đơn và đã định cấu hình chưa? Tôi nghĩ rằng điều chính bạn đang xem xét đó là thời gian để tạo một bản sao của dữ liệu trong bộ nhớ. Tùy thuộc vào chính xác bao nhiêu đồng thời bạn cần, giải pháp đơn giản này có thể là đủ. –

Trả lời

3

bạn có thể sử dụng một hoặc nhiều bảng ETS để tổ chức dữ liệu của bạn.

Điền các bảng trong giai đoạn khởi tạo của bạn, sau đó có mọi quá trình đọc từ đó.

Bạn có thể khởi tạo trừu tượng và đọc từ bảng thành một mô-đun, chỉ để đảm bảo bạn có thể chuyển đổi triển khai sau này (như sử dụng chứng mất trí hoặc thứ gì đó khác sau).

Lưu ý rằng các bảng ETS có trong bộ nhớ (theo mặc định) và nếu bạn cần các truy vấn phức tạp hơn, sẽ có chứng mất trí.

2

1.generate xx.csv Để xx.erl

2.complie xx.erl Để xx.beam

3.run ERL

4. request(From, SomeKey) -> spawn(fun() -> Reply = xx:get(SomeKey), to_reply(From, Reply) end).

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