ES 系统模型

ES是一个近实时的查询系统,基于其倒排索引的结构,使得其在根据文档值索引文档相当快,在此基础上,多节点,多分片,多副本等设计提高了整个系统的相应速度的同时,也保证了数据的高可用。下面我们介绍一下ES的存储结构。

Node

节点一般指的是我们部署集群的服务器,一个服务器我们认为是一个节点。这些节点中会存在一个主节点,是通过选举出来的,关于master选举,主要思想还是基于高可用的的分布式选举。内容可以参考master选举链接。
在节点启动之前可以配置节点的属性:

node.master:true
node.data:true

这两个配置某人都是true。如果配置了node.master:true则说明这个节点是master 候选节点 在选举时可以被选举为master节点。node.data 数据节点,如果配置为true 则这个节点将会负责数据的查询,存储,聚合等操作,一般数据节点的网络I/O较高,对于数据节点的机器需要较宽的贷款,磁盘最好使用SSD。

在我们的集群中,目前所有的节点都是数据节点,数据节点中有一大部分作为master候选节点。这样设计的原因是当时申请集群资源时给的是统一的配置的机器,且配置较高。

路由

路由其实是集群的元数据。里面记录每个索引对应的分片数据,以及每个分片存储在哪个node上。单个get查询时,可以根据id直接计算出所属的分片,直接去分片查询,当时过滤search查询时,可以并行的在一个索引的多个分片上查询,加快查询速度。

index

索引,区分Lucene索引,这里的索引可以理解成mysql的数据库表。而Lucene索引其实对应的index下的一个分片。在创建索引时,需要指定索引的模板,即元数据信息,并指定索引元数据的哪些字段。如果不指定索引的字段,在查询时无法使用term进行查询。数据一般以json的方式存入到索引中。在创建索引时,除了要指定元数据外还需要指定索引的主分片个数,以及每个主分片副本的个数。一般主分片的个数设置为何node节点一致,副本分片设置为1。用来保证数据的高可用。

shard(Lucene 索引)

每个分片为一个Lucene索引,本身就是一个单独的搜索引擎,也是底层最基本的读写单元。分片的作用是将大数据量切分成多个分片,这些分片又会存储在不同的节点上,这样,这些数据可以并行操作。一个分片上会包含多个segment段。

segment

每个segment是一个单独的倒排索引。每次es通过refresh将数据刷新到到文件时,同时也会生成一个segment。每个segment包换若干条数据,其中中不同的字段会建立单独的倒排索引。每个倒排索引又会包含多个词,这些词使用B-Tree的结构组织起来。

集群状态

集群的状态分为三个颜色:Green,Yellow,Red。三个颜色分别代表的时:

  • Green:集群所有的分片和副本处于在线状态;
  • Yellow:集群中所有索引的主分片处于在线状态,部分副本可能不在线,这个时候的写请求没有影响,单数读请求不能路由到其他的分片,查询速度会下降。
  • Red:集群中部分索引的主分片处于下先状态,这时候操作的索引的主分片都在线,将不会受太大影响,如果操作的索引的部分主分片存在下线状态,那么查询的数据可能存在缺失。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: es和mongodb都是非关系型数据库,适用于海量数据的存储和查询。教育系统题库设计需要考虑到以下几个方面: 1. 数据模型设计:题库数据库需要明确的数据模型,包括题目、选项、答案、解析等字段。可以使用ES或MongoDB的文档模型存储题目及相关信息。 2. 数据存储和查询:ES和MongoDB都支持分布式存储和水平扩展,可以存储大量的题目数据。ES的全文搜索功能非常强大,适用于题目的模糊查询和关键词搜索;而MongoDB适用于根据题目ID或其他特定字段进行精确查询。 3. 数据索引和优化:针对查询需求,可以在ES或MongoDB中创建索引来提高查询效率。例如,可以为题目内容、关键词、题型等字段创建索引,在查询时能够更快速地定位到匹配的题目。 4. 数据安全性和权限控制:教育系统题库设计可能涉及到敏感数据,需要考虑数据的安全性和权限控制。可以在ES或MongoDB中设置用户访问权限,限制只有授权用户才能进行对题库的更新和查询操作。 5. 数据备份和恢复:教育系统题库中的数据一般属于重要数据,需要定期进行数据备份和恢复操作,以防止数据丢失。ES和MongoDB都提供了备份和恢复机制,可以根据需要进行定期备份。 总的来说,无论是使用ES还是MongoDB,都可以实现教育系统题库的设计需求。根据具体的业务需求和技术选型,可以选择合适的数据库平台进行设计和实现。 ### 回答2: 对于教育系统题库的设计,ESElasticsearch)和MongoDB都可以作为优秀的数据库选择。下面是使用ES和MongoDB分别设计教育系统题库的方法: 1. 使用ES设计教育系统题库: - 在ES中,每道题目将作为一个文档存储,包含题目内容、答案、难度等字段。 - 题目内容可以通过全文搜索功能在ES中进行检索和查询。 - 为了实现题目之间的关联性,可以在文档中添加字段来存储题目的标签或标识,使得用户在查询时可以根据标签或标识来获取相关的题目。 - 题目补充或修改时,ES提供了更新文档的功能,可以方便地进行题目的更新操作。 2. 使用MongoDB设计教育系统题库: - 在MongoDB中,可以创建一个集合来存储所有的题目信息。 - 题目信息以文档形式存储,包括题目内容、答案等字段。 - 为了提高查询性能和降低数据冗余,可以通过嵌套文档的方式来存储题目的选项。 - 可以通过索引来优化查询性能,如根据题目内容字段创建文本索引,以支持快速高效的搜索功能。 - MongoDB还可以支持副本集和分片等特性,以提供数据的高可用性和扩展性。 综上所述,ES和MongoDB都适用于教育系统题库的设计。ES适用于需要高效的全文搜索和关联查询的场景,而MongoDB适用于需要较高的灵活性和可扩展性的场景。具体选择哪种数据库取决于题库的具体需求和技术团队的实际情况。 ### 回答3: 在 MongoDB 中设计教育系统的题库,可以采用以下的数据模型和结构。 首先,我们可以创建一个名为“题目”(questions)的集合来存储所有的题目。每个文档代表一个题目,包含以下字段: - "_id":题目的唯一标识符,可以使用自动生成的 ObjectId。 - "content":题目的内容。 - "options":题目的选项,可以使用数组来存储,每个元素代表一个选项。 - "answer":题目的答案,可以用一个字符串或数字来表示。 - "difficulty":题目的难度,可以用一个数值来表示,例如1代表简单,2代表中等,3代表困难。 接下来,我们可以创建一个名为"题库"(question_bank)的集合来存储题库信息。每个文档代表一个题库,包含以下字段: - "_id":题库的唯一标识符,可以使用自动生成的 ObjectId。 - "name":题库的名称。 - "questions":题库中包含的题目,可以用一个数组来表示,每个元素为一个题目的 ObjectId。 同时,我们还可以为每个学生创建一个名为"学生"(students)的集合,用于记录学生的答题情况和学生成绩。每个文档代表一个学生,包含以下字段: - "_id":学生的唯一标识符,可以使用自动生成的 ObjectId。 - "name":学生的姓名。 - "answers":学生的答题情况,可以用一个数组来表示,每个元素包含一个题目的 ObjectId 和学生的答案。 - "score":学生的成绩,可以用一个数值来表示。 为了方便查询和分析数据,我们可以根据学生的成绩建立一个名为"成绩"(scores)的集合。每个文档代表一个学生成绩,包含以下字段: - "_id":学生成绩的唯一标识符,可以使用自动生成的 ObjectId。 - "student_id":学生的唯一标识符,关联到学生集合中的相应文档。 - "score":学生的成绩。 以上是一个基本的教育系统题库设计的MongoDB数据结构。通过这样的数据模型,可以方便地管理和查询学生的答题情况,计算学生成绩,并进行其他教育系统的功能扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值