天天看点

Hazelcast入门指南第1部分

介绍

我将在Hazelcast上做一个系列。 我从Twitter了解了该产品。 他们决定跟随我,经过对他们所做工作的研究后,我决定跟随他们。 我在推特上说,Hazelcast将是分布式密码破解者的重要Struts。 这引起了一些兴趣,我决定加入一个。 Hazelcast的副总裁开始与我联系,我们认为虽然饼干是一个好项目,但社区(和我)将从为初学者准备的一系列职位中受益。 在www.hazelcast.com上找到的《 哈兹卡斯特之书》预览中,我得到了很多很好的信息。

什么是淡褐色?

Hazelcast是一个分布式的内存数据库。 使用Hazelcast的世界各地都有项目。 该代码在Apache License 2.0下是开源的。

特征

Hazelcast中已经内置了许多功能。 这里是其中的一些:

  • 自动发现网络上的节点
  • 高可用性
  • 内存备份
  • 缓存数据的能力
  • 分布式线程池
    • 分布式执行器服务
  • 在不同分区中具有数据的能力。
  • 异步或同步保留数据的能力。
  • 交易次数
  • SSL支持
  • 存储数据的结构:
    • 清单
  • 不同流程之间的通信结构
    • 队列
  • 原子操作
    • 长寿
  • ID生成
    • IdGenerator
  • 锁定
    • 等量线

使用Hazelcast

只是和Hazelcast一起玩耍和阅读就教会了我去做这些事情。

  1. 数据将存储为字节数组。 (这不是一个假设,我是直接从书中得到的)
  2. 数据将通过网络传输。
  3. 数据是远程的。
  4. 如果数据不在内存中,则不存在。

让我解释这些假设:

数据将存储为字节数组

我从《榛子之书》中获得了这些信息,因此这并不是一个假设。 这很重要,因为不仅数据以这种方式存储, 密钥也是如此。 如果使用除基元或字符串以外的其他键作为键,这会使生活变得非常有趣。 hash()和equals()的开发人员必须以键的形式考虑它,将其视为字节数组而不是类。

数据将通过网络

这是一个分布式数据库,因此部分数据将存储在其他节点中。 也有备份和缓存。 有一些技术和设置可以减少通过网络传输数据的速度,但如果要获得高可用性,则必须进行备份。

数据是远程的

这是一个分布式数据库,因此数据库的一部分将存储在其他节点上。 我提出这个假设并不是要屈服于数据是远程的事实,而是要激励设计以确保在大多数数据所在的位置执行操作。 如果开发人员足够熟练,则可以将其降至最低。

如果数据不在内存中,则不存在

不要忘记这是一个内存数据库。 如果未将其加载到内存中,则数据库将不知道数据存储在其他位置。 该数据库不会保留数据以备以后使用。 之所以持续存在,是因为数据很重要。 一旦它内存不足,就无法像传统数据库( MySQL)那样将其从磁盘中带回。

数据存储

Java开发人员将很高兴知道Hazelcast的数据存储容器(其中一个是java.util.Collections接口的扩展)除外。 例如,一个IList遵循与java.util.List相同的方法协定。 以下是不同数据存储类型的列表:

  • IList –这使许多对象按其放入顺序排列
  • IQueue –在BlockingQueue之后,可以用作JMS中的Message Queue的替代。 这可以通过QueueStore保留
  • IMap –这扩展了ConcurrentMap。 它也可以由MapStore保留。 它还具有许多其他功能,我将在另一篇文章中讨论。
  • ISet –保留一组唯一的元素,这些元素不能保证顺序。
  • MultiMap –它不遵循典型的地图,因为每个键可以有多个值。

设定

对于Hazelcast包含的所有功能,初始设置步骤非常简单。

  1. 下载在Hazelcast zip文件www.hazelcast.org和提取内容。
  2. 将在lib目录中找到的jar文件添加到一个人的类路径中。
  3. 创建一个名为hazelcast.xml的文件,并将以下内容放入文件中
<?xml version="1.0" encoding="UTF-8"?>
<hazelcast
xsi:schemaLocation ="http://www.hazelcast.com/schema/config
http://www.hazelcast.com/schema/config/hazelcast-config-3.0.xsd "
xmlns ="http://www.hazelcast.com/schema/config "
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance">
    <network>
        <join><multicast enabled="true"/></join>
    </network>
    
    <map name="a"></map>
</hazelcast>
           

Hazelcast在一些地方查找配置文件:

  • 由hazelcast.config属性定义的路径
  • 如果类路径包含在hazelcast.config中,则类路径中的hazelcast.xml
  • 工作目录
  • 如果其他所有方法均失败,则将hazelcast-default.xml加载到hazelcast.jar中。
  • 如果根本不想处理配置文件,则可以以编程方式完成配置。

此处的配置示例定义了用于加入的多播。 它还定义了IMap“ a”。

关于配置的警告

Hazelcast不会将配置复制到每个节点。 因此,如果希望能够共享一种数据结构,则需要在每个节点中完全相同地定义它。

这段代码调出了两个节点,并使用IdGenerator将值放在实例的IMap中,以生成键并从instance2读取数据。

package hazelcastsimpleapp;

import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.IdGenerator;
import java.util.Map;

/**
 *
 * @author Daryl
 */
public class HazelcastSimpleApp {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        HazelcastInstance instance = Hazelcast.newHazelcastInstance();
        HazelcastInstance instance2 = Hazelcast.newHazelcastInstance();
        
        Map map = instance.getMap("a");
        IdGenerator gen = instance.getIdGenerator("gen");
        for(int i = 0; i < 10; i++) {
            map.put(gen.newId(), "stuff " + i);
        }
        
        Map map2 = instance2.getMap("a");
        for(Map.Entry entry: map2.entrySet()) {
            System.out.printf("entry: %d; %s\n", entry.getKey(), entry.getValue());
        }
        
        System.exit(0);
    }
    
}
           

非常简单,不是吗! 请注意,检索地图实例时,我什至没有使用IMap接口。 我只是使用java.util.Map接口。 这不利于使用Hazelcast的分布式功能,但在此示例中,它工作正常。

在这里可以观察到工作中的假设。 第一个假设是将信息存储为字节数组。 注意数据和密钥是可序列化的。 这很重要,因为这是存储数据所必需的。 第二个和第三个假设适用于instance2节点正在访问的数据。 第四个假设成立是因为读取时会显示放入“ a”映射中的每个值。 使用subversion可以在http://darylmathisonblog.googlecode.com/svn/trunk/HazelcastSimpleApp中找到所有这些示例。 该项目是使用Netbeans 8.0进行的。

结论

通过显示IMap和IdGenerator的简单示例回顾了Hazelcast众多功能的快速概述。 讨论了在分布式内存数据库环境中开发时适用的一系列假设。

资源资源

榛子之书。 从http://www.hazelcast.com下载

翻译自: https://www.javacodegeeks.com/2014/10/beginners-guide-to-hazelcast-part-1.html