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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue 组件与复用

&#xff08;1&#xff09;全局注册 <!DOCTYPE html><html lang"zh"><head><meta charset"UTF-8" /><title>Vue</title></head><body><div id"app"><my-component></my-compone…

js笔记(二)数组、对象、this

大标题小节一、数组1. 数组的创建、赋值、分类&#xff1b;2. 数组的简单操作&#xff08;根据索引增、查、改&#xff09;&#xff1b;3. 声明式和构造函数创建的数组的区别&#xff1b;4.数组的方法&#xff1a;push()、unshift()、splice()、pop()、shift()、slice()、sort(…

Oracle SYSAUX 表空间 说明

一. SYSAUX 说明 在Oracle 10g 版本中&#xff0c;引入了SYSTEM表空间的一个辅助表空间&#xff1a; SYSAUX表空间。 SYSAUX 表空间存放一些其他的metadata组件&#xff0c;如OEM,Streams 等会默认存放在SYSAUX表空间里。这样也能降低SYSTEM表空间的负载。 因此SYSAUX 表空间也…

JAXB –新手的观点,第2部分

在本系列的第1部分中&#xff0c;我讨论了使用JAXB和JPA将数据从XML文件加载到数据库中的基础知识。 &#xff08;如果需要使用JSON而不是XML&#xff0c;则相同的想法应转化为类似Jackson的工具。&#xff09;该方法是使用共享域对象-即&#xff0c;一组带有描述XML映射和关系…

[C++Primer] 第二章 变量和基本类型

第二章 变量和基本类型 引用 引用定义的时候必须初始化。引用初始化之后无法重新绑定到其它对象上。引用本身并不是对象&#xff0c;所以没有指向引用的引用&#xff08;不管如何多层引用&#xff0c;引用的还是源对象&#xff09;下面用一个简单的例子说明&#xff1a; int a1…

VUE v-bind绑定class和style

1、绑定class &#xff08;1&#xff09;对象语法 <!DOCTYPE html><html lang"zh"><head><meta charset"UTF-8" /><title>vue示例</title></head><body><div id"app"><div class&quo…

js笔记(四)内置对象Math和Date()、浏览器对象模型BOM

大标题小标题备注一、内置对象Math、Date()1. Math 数学对象;2. Date() 日期对象;常用的数学对象&#xff1a;Math.PI、abs(n)、round(n)、random()、floor(n)、ceil(n)、pow(x,y)、sqrt(n)、min(3,4,5,6)、max()、sin(弧度)、cos()、tan()&#xff1b;获取日期&#xff1a;get…

ListView展示SIM信息

首先看一下程序运行后的图片&#xff1a; 在开始写代码之前&#xff0c;看展示下程序的结构&#xff1a; 下面开始代码, 第一步&#xff0c;主程序代码&#xff1a; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundl…

MQ

https://mp.weixin.qq.com/s/AFjYLtqGXkOVHcETePBHBw https://mp.weixin.qq.com/s/5pPjUOfAH6IN7cXMgMvoKw转载于:https://www.cnblogs.com/codeLei/p/11052781.html

代理的JavaOne 2014观察

我今年无法参加JavaOne&#xff0c;但很高兴看到一些在线资源涵盖了JavaOne 2014的活动。在本文中&#xff0c;我总结了JavaOne 2014的一些观察结果&#xff0c;并提供了指向提供这些观察结果的参考的链接。提供有关这些观察的更多背景细节。 列出的观察结果没有特定的顺序&…

push和unshift方法

push和unushift都是向数组插入元素。 push是向数组尾部插入元素。 unshift是向数组头部插入元素。 共同点&#xff1a;都可以一次插入多个元素。 arrayObject.push(newelement1,newelement2,....,newelementX) arrayObject.unshift(newelement1,newelement2,....,newelement…

js笔记(五)文档对象模型DOM

大标题小节一、DOM选择器1. id 选择器&#xff1a;getElementById("id名")&#xff1b;2. class 选择器&#xff1a;getElementByClassName("class名")&#xff1b;3. 标签选择器&#xff1a;getElementsByTagName("标签名")&#xff1b;4. name…

星期五基准功能Java

让我们的产品负责人想象一下有一天会发疯&#xff0c;并要求您执行以下操作&#xff1a; From a set of Strings as follows : “ marco_8”&#xff0c;“ john_33”&#xff0c;“ marco_1”&#xff0c;“ john_33”&#xff0c;“ thomas_5”&#xff0c;“ john_33”&am…

SEO优化实践操作

合理的title、description、keywords&#xff1a;搜索对着三项的权重逐个减小&#xff0c;title值强调重点即可&#xff0c;重要关键词出现不要超过2次&#xff0c;而且要靠前&#xff0c;不同页面title要有所不同&#xff1b;description把页面内容高度概括&#xff0c;长度合…

Flot画实时曲线

源代码&#xff1a; <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> <title>深海的小鱼编制-PLOT</title> <script language"javascript" type"text/javascript" src"…

RHQ指标的WildFly子系统

对于RHQ-Metrics&#xff0c;我已经开始为WildFly 8编写一个子系统&#xff0c;该子系统能够在WildFly内收集指标&#xff0c;然后以固定的时间间隔&#xff08;当前为每分钟&#xff09;将其发送到RHQ-Metrics服务器。 下一张图是该发件人连续运行1.5天时结果的可视化效果的G…

Linux下实现客户端和服务器端的通信

首先&#xff0c;可以将代码复制下来放到U盘里&#xff0c;然后挂载到Linux上 挂载步骤 找到设备->USB->你U盘的名字 挂载成功 访问U盘把代码拷贝到home文件夹下&#xff0c;就可以直接进行编译。 client.c #include <stdio.h> #include <unistd.h>#include…

gvim 安装 taglist

gvim 安装 taglist windows XP下&#xff0c;gvim,安装taglisttaglist 是在vim 下可以像 vc当中的可以列出类&#xff0c;函数 的插件。一&#xff0c;下载ctags,将其中的 ctags.exe 复制到gvim.exe 所在的目录&#xff0c;我的是 C:\Program Files\Vim\vim73如果不复制的话&am…

js笔记(八)ES6

大标题补充描述一、 ES6 中新增的声明方式&#xff1a;let、constvar、let、const之间的区别二、 ES6 字符串扩展1. 子串的识别&#xff1a;includes()、startsWith()、endsWith()&#xff1b;2. 重复字符串&#xff1a;repeat()&#xff1b;3. 字符串补全&#xff1a;padStart…

卡夫卡编年史队列基准

总览 最近&#xff0c;我被要求比较《卡夫卡》和《编年史》的性能。 没有两个产品是完全一样的&#xff0c;要进行公平的比较并不容易。 我们可以尝试运行类似的测试&#xff0c;看看会得到什么结果。 该测试基于Apache Kafka性能结果 。 测试使用了什么&#xff1f; 卡夫卡测…