将mysql用作文档存储_es 存储文档得大小_Elasticsearch的用例:文档存储

es 存储文档得大小

我将在7月两次进行关于Elasticsearch的介绍性演讲,首先是在Developer WeekNürnberg ,然后是Java Forum Stuttgart 。 我通过查看某些用例来展示Elasticsearch的一些功能。 为了准备讲座,我还将尝试在博客文章中描述每个用例。 在谈到Elasticsearch时,经常要注意的第一件事是搜索部分。 但是在这篇文章中,我想从其作为分布式文档存储的功能开始。

入门

在开始之前,我们需要安装Elasticsearch,幸运的是这很容易。 您可以下载存档,解压缩并使用脚本启动它。 由于它是基于Java的应用程序,因此您当然需要安装Java运行时。

# download archive

wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.2.1.zip

# zip is for windows and linux

unzip elasticsearch-1.2.1.zip

# on windows: elasticsearch.bat

elasticsearch-1.2.1/bin/elasticsearch

可以使用HTTP和JSON来讨论Elasticsearch,在查看示例时,您经常会看到curl被使用,因为它广泛可用。 (有关使用插件查询Elasticsearch的替代方法,请参阅本文 )。 要查看它是否已启动并正在运行,可以在端口9200上发出GET请求: curl -XGET http://localhost:9200 。 如果一切都设置正确,Elasticsearch将响应以下内容:

{

"status" : 200,"name" : "Hawkeye",

"version" : {

"number" : "1.2.1",

"build_hash" : "6c95b759f9e7ef0f8e17f77d850da43ce8a4b364",

"build_timestamp" : "2014-06-03T15:02:52Z",

"build_snapshot" : false,

"lucene_version" : "4.8"

},

"tagline" : "You Know, for Search"

}

储存文件

当我说文档时,这意味着两件事。 首先,Elasticsearch存储JSON文档,甚至在内部大量使用JSON。 这是描述会议演讲的简单文档的示例。

{

"title" : "Anwendungsfälle für Elasticsearch",

"speaker" : "Florian Hopf",

"date" : "2014-07-17T15:35:00.000Z",

"tags" : ["Java", "Lucene"],

"conference" : {

"name" : "Java Forum Stuttgart",

"city" : "Stuttgart"

}

}

有字段和值,数组和嵌套文档。 Elasticsearch支持所有这些功能。 除了用于在Elasticsearch中存储数据的JSON文档外,文档还引用了基础库Lucene,该库用于持久存储数据并将数据作为由字段组成的文档进行处理。 因此,这是一个完美的匹配:Elasticsearch使用JSON,JSON非常流行并且得到许多技术的支持。 但是底层数据结构也使用文档。 在为文档建立索引时,我们可以向某个URL发出发布请求。 请求的正文包含要存储的文档,我们传递的文件包含我们上面看到的内容。

curl -XPOST http://localhost:9200/conferences/talk/ --data-binary @talk-example-jfs.json

启动时,Elasticsearch默认在端口9200上侦听。 为了存储信息,我们需要在URL中提供一些其他信息。 端口之后的第一段是索引名称。 索引名称是文档的逻辑分组。 如果您想将其与关系世界进行比较,可以将其视为数据库。 下一个需要提供的细分是类型。 类型可以描述存储在其中的文档的结构。 您可以再次将其与关系世界进行比较,这可以是一个表,但这只是稍微正确一点。 任何类型的文档都可以存储在Elasticsearch中,这就是为什么它通常被称为自由模式。 我们将在下一篇文章中介绍这种行为,在该文章中您将看到“免费模式”不是最合适的术语。 现在就足够知道您可以在Elasticsearch中存储结构完全不同的文档。 这也意味着您可以改进文档并适当添加新字段。 请注意,启动索引文档时,索引和类型都不需要存在。 它们将自动创建,这是使从Elasticsearch轻松启动的众多功能之一。 当您在Elasticsearch中存储文档时,它将自动为您生成一个ID,该ID也会在结果中返回。

{

"_index":"conferences",

"_type":"talk",

"_id":"GqjY7l8sTxa3jLaFx67_aw",

"_version":1,

"created":true

}

如果您想自己确定ID,也可以在上面已经看到的相同URL上加上PUT加上ID。 我不想通过调用此RESTful遇到麻烦,但是您是否注意到Elasticsearch很好地利用了HTTP动词? 无论哪种方式存储文档,都可以始终通过指定索引,类型和ID来检索它。

curl -XGET http://localhost:9200/conferences/talk/GqjY7l8sTxa3jLaFx67_aw?pretty=true

它将以如下方式响应:

{

"_index" : "conferences",

[...]

"_source":{

"title" : "Anwendungsfälle für Elasticsearch",

"speaker" : "Florian Hopf",

"date" : "2014-07-17T15:35:00.000Z",

"tags" : ["Java", "Lucene"],

"conference" : {

"name" : "Java Forum Stuttgart",

"city" : "Stuttgart"

}

}

}

您可以看到响应中的源完全包含我们之前已建立索引的文档。

分布式存储

到目前为止,我们已经了解了Elasticsearch如何存储和检索文档,并且了解到您可以演化文档的架构。 到目前为止,我们尚未触及的巨大好处是它是分布式的。 每个索引可以分为几个碎片,然后可以在多个计算机之间分布。 幸运的是,要了解实际运行中的分布式特性,我们不需要多台机器。 首先,让我们在插件elasticsearch-kopf中查看当前正在运行的实例的状态(有关如何安装和使用它的详细信息,请参阅此帖子 ):

796653bb5a340ff60c341df94a6ccbb7.png

在左侧,您可以看到有一台计算机正在运行。 顶部的行显示它包含我们的索引会议。 即使我们没有明确告诉Elasticsearch,它也为索引创建了5个分片,这些分片目前都在我们启动的实例上。 由于每个分片本身就是一个Lucene索引,即使您在一个实例上运行索引,存储的文档也已经分布在多个Lucene索引中。 现在,我们可以使用相同的安装来启动另一个节点。 短时间后,我们也应该在仪表板中看到该实例。

1b9b4b774a74ee826736fd3a2bac80ee.png

随着新节点加入集群(默认情况下会自动发生),Elasticsearch将自动将碎片复制到新节点。 这是因为默认情况下,它不仅使用5个分片,而且还使用1个副本,这是一个分片的副本。 副本始终放置在与其碎片不同的节点上,并用于分配负载和容错。 如果一个节点崩溃,则另一节点上的数据仍然可用。 现在,如果我们启动另一个节点,将会发生其他事情。 Elasticsearch将重新平衡碎片。 它将分片复制并移动到新节点,以使分片在计算机之间均匀分布。 6e82fba9fbbdf43ad974ae262938a387.png

一旦在创建索引时定义了碎片数,就无法更改。 这就是为什么您通常进行总体分配(创建比现在需要更多的碎片)的原因,或者如果您的数据允许,则可以创建基于时间的索引。 请注意,分片会带来一些成本,请仔细考虑您的需求。 即使使用Elasticsearch开箱即用,您仍然很难设计发行设置。

结论

在本文中,我们看到了使用Elasticsearch存储和检索文档有多么容易。 JSON和HTTP是许多编程环境中可用的技术。 您的文档架构可以随着需求的变化而发展。 Elasticsearch默认情况下会分发数据,并允许您跨多台机器进行扩展,因此即使对于非常大的数据集也非常适合。 尽管将Elasticsearch用作文档存储是一个真实的用例,但很难找到仅以这种方式使用它的用户。 就像我们在这篇文章中看到的那样,没有人仅通过id来检索文档,而是使用我们将在下周查看的丰富查询工具。 但是,您可以在此处和此处阅读有关Hipchat如何使用Elasticsearch存储数十亿条消息以及Engagor如何使用Elasticsearch的 信息 。 他们俩都使用Elasticsearch作为其主要存储。 尽管听起来可能比实际的要棘手得多:如果您正在考虑将Elasticsearch用作主存储,还应该阅读有关网络分区的Elasticsearchs行为分析 。 下周,我们将研究使用Elasticsearch进行一些明显的操作:搜索。

翻译自: https://www.javacodegeeks.com/2014/07/use-cases-for-elasticsearch-document-store.html

es 存储文档得大小

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值