metaclass: (Default)
[personal profile] metaclass
Рассуждая тут о передаче сложных составных объектов (документы с описаниями их форм и ссылками на справочники) между разными базами данных, в итоге пришел к тому, что большая часть проблем решится, если научится передавать между границами процессов, машин и систем вообще не только значения, а еще и вычисления.

Как передать значения мы в общем-то знаем - сериализовав их в что-то понятное другому участнику обмена.

А вычисления нужно или тащить целиком с кодом и его параметрами или передавать что-то аналогичное thunk(т.е. отложенное ленивое вычисление) в виде вызова "рассчитать значение, обратившись к тому, кто передал").

А поскольку система распределенная - нам никто не обещал, что тот кто передал вычисление, на момент обращения к нему(force), вообще включен, доступен по сети, не накрылся ошибкой и прочим свиным гриппом. И что переданные данные не изменились с момента передачи. Соответственно, в таком случае все вычисления далее могут быть задержаны или же вернуть пользователю вместо ожидаемого отчета о поголовье свиней сообщение об ошибке "Schweine-Zähler Server "DOMAIN\\Zuchtsau001" Verbindung kann nicht hergestellt werden".

А все изменения данных тогда изначально должны поддерживать версионность, т.е. любые предыдущие значения должны быть доступны и идентифицируемы извне.

И, как обычно, рассуждать о этой хреновине проще всего получается в терминах чистых ленивых функциональных языков и прочей околохаскелевой жути.

Date: 2009-04-29 08:02 am (UTC)
From: [identity profile] blackyblack.livejournal.com
Что даст такой подход? В принципе, оно реализуется на Ерланге. Да и на шарпе можно выпендриться - передать кусок кода и выполнить его на другой машине.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 20th, 2025 12:07 am
Powered by Dreamwidth Studios