Ответы на мой предыдущий вопрос о доступе к базе данных и абстракции службы помогли мне понять, что в SOA служба базы данных должна предоставлять публичный API, а не прямой доступ (SQL или через ORM) к базе данных.
Теперь, если я хочу создать службу (SOA) в приложении Erlang/OTP, я думаю, что это должен быть gen_server или другое поведение OTP, потому что в этом случае API будет легко определен, а сама служба может быть легко включена в приложение.
Но как я должен передавать данные от сервиса к его потребителю?
Я знаю, что в Ruby on Rails я могу сделать что-то вроде
persons = Person.find(all)
Затем я могу просто вернуть persons
потребителю услуги.
В Erlang/OTP, если persons
составляет несколько тысяч записей, должен ли я передать его в операторе возврата gen_server? Это означает, что gen_server отправит сообщение вызывающей стороне (потребителю службы), и сообщение будет по существу скопировано в виртуальной машине Erlang. Я склонен думать, что это неправильное использование передачи сообщений Erlang.
Итак, мой вопрос:
- Как я могу создать службу базы данных (SOA) в Erlang/OTP?
- Должен ли API такого сервиса использовать стандартные механизмы OTP (например, ответное сообщение gen_server) или что-то еще?