在LINQPad中使用Ignite.NET
LINQPad是进行.NET开发的一款优秀工具,非常有利于Ignite.NET API的快速入门。
入门
-
下载LINQPad:linqpad.net/Download.aspx,注意要选择64位操作系统的AnyCPU版本;
-
安装Ignite.NET的NuGet软件包:
- 按F4(或点击
Query
->References
和Properties
菜单项); - 点击
Add NuGet…
,可能会出现警告:As you don't have LINQPad Premium/Developer Edition, you can only search for NuGet packages that include LINQPad samples.
,这是正常的,因为Ignite软件包确实包含LINQPad示例; - 通过单击
Add To Query
按钮来安装软件包; - 点击
Add namespaces
按钮,并(至少)添加第一个:Apache.Ignite.Core
; - 关闭NuGet窗口,在
Query Properties
窗口上单击OK
;
- 按F4(或点击
-
确认
Language
下拉框设置为C# Expression
(默认设置); -
输入
Ignition.Start()
,然后按下F5。
Ignite节点启动后,就可以在输出面板中看到通常的控制台输出。
在左侧的Samples
选项卡上可以看到打包的示例代码。
回收工作进程
LINQPad在单独的进程中运行业务代码,该进程默认在多次运行之间可以重复使用(出于性能原因)。
这有两个问题:
- Ignite.NET启动进程内JVM,该进程重用时,也会重用此JVM,因此无法修改JVM选项;
Ignition
类将所有启动的节点保留在静态映射中,该进程重用时,这些节点将保持运行,如果执行Ignition.Start()
两次,则会抛出Default Ignite instance has already been started.
这样的错误。
该行为有时可能有用,但有时则不需要,但是幸好可以通过内置的Util.NewProcess
属性来控制它。先将顶部的Language
下拉框切换到C# Statement(s)
模式,然后运行以下脚本:
Util.NewProcess = true; Ignition.Start();
该脚本多次运行也不会出问题,因为每次都是从头开始的。
重用启动节点
由于JVM启动和网络发现的过程,Ignite节点需要一些时间才能启动。为了在LINQPad中对代码快速迭代,可以在多次运行之间重用已启动的节点。例如下面的代码重用启动的Ignite实例并重用现有的缓存,每次运行添加一条数据并显示现有的数据:
// Get existing instance or start a new one var ignite = Ignition.TryGetIgnite() ?? Ignition.Start(); // Get existing cache or create a new one var cache = ignite.GetOrCreateCache<Guid, DateTime>("cache"); // Add a new entry cache[Guid.NewGuid()] = DateTime.Now; // Show all entries cache.Dump();
与重启节点需要几秒钟的时间相反,此代码将在几毫秒内运行。
必要时可以通过Shift+Control+F5
卸载AppDomain
并从头开始。
使用技巧
除了简单讲解Ignite API之外,还建议关注下下面的Ignite + LINQPad使用场景:
检查现有的缓存
Visor命令行工具可以显示缓存的内容,但是在LINQPad中执行此操作更加灵活且友好,因为LINQPad脚本中没有任何实际的类,因此必须通过二进制模式才能读取缓存的内容。
以下代码显示了所有缓存的列表以及每个缓存中的前5条数据:
var ignite = Ignition.TryGetIgnite() ?? Ignition.Start(); foreach (var cacheName in ignite.GetCacheNames()) ignite.GetCache<object, object>(cacheName) .WithKeepBinary<object, object>() .Select(x => x.ToString()) .Take(5) .Dump(cacheName);
将Spring XML配置转换为C# IgniteConfiguration
假设有一些Ignite Spring XML配置文件,并且需要对Ignite.NET也使用相同的配置,或者要从Ignite.NET 1.5迁移,该版本中Spring XML是唯一的配置机制。
具体上可以简单地使用上述Spring XML文件启动节点,然后调用GetConfiguration()
以查看其在.NET中对应的配置:
Ignition.Start(@"spring-config.xml").GetConfiguration()
将IgniteConfiguration转换为app.config XML
Ignite.NET支持app.config和web.config配置。但是编写XML并不高效,而在C#中使用IgniteConfiguration
则更容易一些,因为IDE会有很大的帮助,可以避免无法编译的无效代码。
为了配合使用XML,有一种将IgniteConfiguration
实例转换为XML表示形式的隐藏方法。以下代码显示了如何通过反射(早期版本)使用它(确认已将Language
下拉菜单设置为C#Program
):
void Main() { new IgniteConfiguration { CacheConfiguration = new[] { new CacheConfiguration { Name = "myCache", CacheMode = CacheMode.Replicated } } }.ToXml().Dump(); } public static class IgniteConfigurationExtensions { public static string ToXml(this IgniteConfiguration cfg) { var sb = new StringBuilder(); var settings = new XmlWriterSettings { Indent = true }; using (var xmlWriter = XmlWriter.Create(sb, settings)) { typeof(Ignition).Assembly .GetType("Apache.Ignite.Core.Impl.Common.IgniteConfigurationXmlSerializer") .GetMethod("Serialize") .Invoke(null, new object[] {cfg, xmlWriter, "igniteConfiguration"}); } return sb.ToString(); } }
结果是:
<?xml version="1.0" encoding="utf-16"?> <igniteConfiguration xmlns="http://ignite.apache.org/schema/dotnet/IgniteConfigurationSection"> <cacheConfiguration> <cacheConfiguration name="myCache" cacheMode="Replicated" /> </cacheConfiguration> </igniteConfiguration>
结合先前的Spring XML场景,还可以将Spring XML转换为app.config XML。
在最新的版本中,在开放API中还有ToXml
方法,会更方便。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java NIO:Buffer、Channel 和 Selector
本文将介绍 Java NIO 中三大组件Buffer、Channel、Selector的使用。 本来要一起介绍非阻塞 IO和 JDK7 的异步 IO的,不过因为之前的文章真的太长了,有点影响读者阅读,所以这里将它们放到另一篇文章中进行介绍。 Buffer 一个 Buffer 本质上是内存中的一块,我们可以将数据写入这块内存,之后从这块内存获取数据。 java.nio 定义了以下几个 Buffer 的实现,这个图读者应该也在不少地方见过了吧。 其实核心是最后的ByteBuffer,前面的一大串类只是包装了一下它而已,我们使用最多的通常也是 ByteBuffer。 我们应该将 Buffer 理解为一个数组,IntBuffer、CharBuffer、DoubleBuffer 等分别对应 int[]、char[]、double[] 等。 MappedByteBuffer 用于实现内存映射文件,也不是本文关注的重点。 我觉得操作 Buffer 和操作数组、类集差不多,只不过大部分时候我们都把它放到了 NIO 的场景里面来使用而已。下面介绍 Buffer 中的几个重要属性和几个重要方法。 posi...
- 下一篇
分布式及高可用元数据采集原理
转载本文需注明出处:微信公众号EAWorld,违者必究。 引言: 元数据采集是元数据产品的核心部分,如何提升采集效率是需要仔细斟酌的事情,既要保持稳定性也要保持跟上主流技术的发展趋势。元数据产品从最初集中式WEB应用系统到现在流行的分布式、微服务这种系统架构,原有元数据采集效率已不能满足应用的需求了。 目录: 1.元数据采集原理 2.分布式采集策略 3.分布式采集策略的应用 1.元数据采集原理 我们要想采集元数据首先得明白,什么是元数据,元数据都存在哪里,为什么采集元数据? 元数据MetaData通俗的解释是用来描述数据的数据,实际来看,除了业务逻辑直接读写处理的那些业务数据,所有其它用来维持整个系统运转所需的信息/数据都可以叫作元数据。比如数据库的Schema、Table、Column信息,任务的血缘关系,用户和脚本/任务的权限映射关系信息等等。 以大数据平台为例,元数据贯穿大数据平台数据流动的全过程,主要包括数据源元数据、数据加工处理过程元数据、数据主题库专题库元数据、服务层元数据、应用层元数据等。 数据治理关键就是收集信息,很明显,没有数据就无从分析,也就无法有效的对平台的数据链...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Mario游戏-低调大师作品
- 2048小游戏-低调大师作品
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案