Измените внутренние данные с помощью Rserve

У меня есть большой data.frame, загруженный в память в экземпляре R на одной машине, и я использую Rserve, чтобы разрешить доступ к этим данным от удаленных клиентов. Я хотел бы иметь возможность удаленно вносить изменения в data.frame, например добавлять столбец или изменять значение, и я хотел бы, чтобы эти изменения были доступны другим клиентам.

# server side
> xxx<-data.frame(a=1:3,b=4:6)
> run.Rserve(port = 6311, ...)

# client side
> cc<-RSconnect(port=6311, ...)
> RSeval(cc,'xxx$c<-7:9')
> RSeval(cc,'xxx')
  a b c
1 1 4 7
2 2 5 8
3 3 6 9

Однако, когда я подключаюсь ко второму клиенту, он не видит изменений:

# another client
> cc2<-RSconnect(port=6311, ...)
> RSeval(cc2,'xxx')
  a b
1 1 4
2 2 5
3 3 6

Когда сервер остановлен, внутренние данные также не изменяются. Изменения доступны только тому клиенту, который их внес, не совсем то, что мне нужно.

Есть ли способ заставить это работать?


person Assaf Wool    schedule 21.02.2017    source источник
comment
Я бы использовал базу данных или внешний плоский файл для чтения/записи этими отдельными сеансами. С data.table fread и fwrite вы не заметите никакой перегрузки, предполагаемые данные являются разумными.   -  person Eric Lecoutre    schedule 21.02.2017
comment
Спасибо, я собирался это сделать, но потом нашел способ сделать это напрямую с помощью Rserve (см. мой ответ ниже).   -  person Assaf Wool    schedule 22.02.2017


Ответы (1)


Нашел!! Ответ был в руководстве по пакету RSclient, просто пришлось его внимательно перечитать.

Это можно сделать с помощью RSserverEval. Эта команда вносит изменения в исходные данные сервера, а не в данные, доступные в текущем соединении. Таким образом, клиент, делающий изменения, не может их использовать, только клиенты, которые подключатся позже. Это немного раздражает, так как сервер будет выполнять команду и не может использовать данные, созданные клиентом, но он делает то, что мне нужно. Важно отметить, что сервер должен быть настроен для включения команд управления (command enable в файле конфигурации).

person Assaf Wool    schedule 22.02.2017