- PVSM.RU - https://www.pvsm.ru -
Недавно вышла новая версия распределённой SQL базы данных Apache Ignite [1], предлагаю взглянуть на новые фичи с позиции .NET.
До версии 2.4 как в Java, так и в .NET [2], было два варианта подключения к кластеру: Server и Client. В целом, клиентский режим отличается от серверного только тем, что клиентские узлы не хранят данные и не выполняют вычисления (compute, map-reduce). В остальном переиспользуются существующие компоненты discovery & communitaction. Присоединение клиентского узла к кластеру — относительно тяжёлый процесс, который может занять несколько секунд.
Ситуация с .NET осложняется тем, что внутри процесса стартует JVM, потребляя немало ресурсов и внося дополнительные требования к окружению.
Все эти проблемы решает наш новый «тонкий» клиент [3]:
Из функциональности есть пока только Cache + LINQ, в будущем планируется добавить всё остальное.
При этом API выглядит идентично:
var cfg = new IgniteClientConfiguration { Host = "127.0.0.1" };
using (var client = Ignition.StartClient(cfg))
{
var cache = client.GetCache<int, Person>("persons");
cache[1] = new Person(1, "Vasya");
cache[2] = new Person(2, "Petya");
// SQL
cache.Query(new SqlFieldsQuery("select name from person where id > 1"));
// LINQ
cache.AsCacheQueryable().Where(x => x.Value.Id > 1) ...;
}
Надо заметить, что появление тонкого клиента вовсе не означает, что существующий "толстый" API будет в будущем отправлен на свалку:
Пример в LINQPad
В процессе работы с Ignite может возникнуть желание быстро подключиться к кластеру, посмотреть на данные в кэшах, запустить какой-то запрос. Для этого существуют такие инструменты, как Visor Command Line [6] и Web Console [7].
С появлением тонкого клиента всё это можно быстро и удобно делать через LINQPad [8]. Достаточно добавить NuGet пакет Apache.Ignite
через "Add NuGet...", и готовый пример кода будет загружен автоматически.
Заголовок говорит сам за себя, теперь Ignite.NET можно использовать на следующих платформах и ОС:
Как попробовать?
Под .NET Core инструкция [9] одинаковая для всех платформ:
dotnet new console
dotnet add package Apache.Ignite
Apache.Ignite.Core.Ignition.Start();
dotnet run
Сборка проекта выдаст предупреждение warning NU1701: Package 'Apache.Ignite 2.4.0' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETCoreApp,Version=v2.0'. This package may not be fully compatible with your project.
Причина в том, что внутри NuGet пакета лежит единственная dll-ка, собранная под .NET 4.0, что сделано для упрощения процесса. Это нисколько не мешает ей работать под .NET Core. Подавить предупреждение можно при помощи строчки <PropertyGroup><NoWarn>NU1701</NoWarn></PropertyGroup>
в файле csproj
.
Mono
Mono работает с обычными 'Classic .NET' солюшнами, создать их на Linux можно в MonoDevelop [10].
Один из юз кейсов для Mono — это 32-битные процессоры, ведь .NET Core требует x64. Я столкнулся с этим, тестируя запуск Ignite.NET на всём, что попадало под руку, а под руку попался старенький EEE PC 901 с установленной Lubuntu [11], где под Mono всё благополучно запустилось.
Разработка на Linux и macOS
Помимо использования, Ignite.NET теперь также можно и разрабатывать на Linux и macOS. Под Mono основной солюшн компилируется как есть. Под .NET Core для этого добавлены отдельные файлы солюшна и проектов под .NET Core:
Apache.Ignite.DotNetCore.sln [12].
Ignite.NET теперь охватывает все основные платформы и операционные системы. Один из востребованных use cases, ставший возможным, это кластер из .NET узлов, запущенный на Linux, и клиентские приложения, работающие через «тонкий» протокол на рабочих станциях под Windows.
Планируется дальнейшее развитие направления .NET Core: интеграция с ASP.NET Core (кэширование) и Entity Framework Core (кэширование, провайдер данных). Такие интеграции [13] уже [14] существуют [15] для классических ASP.NET и EF.
Автор: kefirr
Источник [16]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/276181
Ссылки в тексте:
[1] Apache Ignite: https://ignite.apache.org/
[2] .NET: https://apacheignite-net.readme.io/docs/
[3] «тонкий» клиент: https://apacheignite-net.readme.io/v2.4/docs/thin-client
[4] Compute: https://apacheignite-net.readme.io/docs/compute-grid
[5] Services: https://apacheignite-net.readme.io/docs/service-grid
[6] Visor Command Line: https://apacheignite-tools.readme.io/docs/command-line-interface
[7] Web Console: https://apacheignite-tools.readme.io/docs/ignite-web-console
[8] LINQPad: https://www.linqpad.net/
[9] инструкция: https://apacheignite-net.readme.io/v2.4/docs/cross-platform-support
[10] MonoDevelop: http://www.monodevelop.com/
[11] Lubuntu: https://lubuntu.net/
[12] Apache.Ignite.DotNetCore.sln: https://github.com/apache/ignite/blob/master/modules/platforms/dotnet/Apache.Ignite.DotNetCore.sln
[13] интеграции: https://apacheignite-net.readme.io/v2.4/docs/aspnet-output-caching
[14] уже: https://apacheignite-net.readme.io/v2.4/docs/aspnet-session-state-caching
[15] существуют: https://apacheignite-net.readme.io/v2.4/docs/entity-framework-second-level-cache
[16] Источник: https://habrahabr.ru/post/347374/?utm_campaign=347374
Нажмите здесь для печати.