#c_sharp #linux
Доброе времени суток. Возникла необходимость делиться информацией между двумя приложениями.
Вспомнил что есть MemoryMappedFile, решил воспользоваться. Зашел msdn глянул работает
и под .net core - что очень важно. Так как рассматривается вариант запуска сервисов
под linux-ом. Но тут же я столкнулся с проблемой под linux-ом:
"Unhandled Exception: System.PlatformNotSupportedException: Named maps
are not supported."
Вопрос все еще актуален
Есть ли какие-то альтернативы? Как вы решаете проблему с обработкой больших объемов,
что бы они были доступны между двух и более сервисов?
Задача:
есть данные примерно такого вида:
id price1 price1 (таких записей 1млн) которые необходимо обновлять, ну скажем раз
20 в секунду
UPDATE#1
Named maps - это функция, предоставляемая Windows. Как правило, отображаемые в память
файлы работают путем межпроцессного взаимодействия, отображая один и тот же файл в
несколько процессов, например, используя MemoryMappedFile.CreateFromFile.
Если не использовать именование, то запись будет иметь такой вид:
string path = "/home/test/test";
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.ReadWrite,
FileShare.ReadWrite))
using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(fs, null, fs.Length,
MemoryMappedFileAccess.ReadWrite, HandleInheritability.None, true))
using (MemoryMappedViewAccessor acc = mmf.CreateViewAccessor())
Ответы
Ответ 1
Именованные memory mapped файлы под Linux не поддерживаются. Альтернатива - готовые key-value storage. IMO, проще всего будет прикрутить Redis. Есть готовый образ на dockerhub + есть хороший .NET клиент от Stack Exchange
Комментариев нет:
Отправить комментарий