6.2k 6 分钟

# 语句 语句(statement)执行一到多个动作,表达式(expression)计算并返回结果。 表达式属于语句,而语句未见得是表达式。 关键字 仅 25 个 保留关键字(keywords),体现语法规则的简洁性。 保留关键字不能用作常量、变量、函数名以及结构字段等标识符。 break default func interface selectcase defer go map structchan else goto package switchconst fallthrough if range typecontinue for import return...
7.1k 6 分钟

# 类型 # 基本类型 # 变量 关键字 var 用于定义变量。和 C 不同,类型被放在变量名后。 自动初始化为二进制零值(zero value)。 显式提供初始值,可省略类型,由编译器推断。 同一作用域内不能重复定义。 未使用局部变量当做错误。 var x int // 0var y = false // bool可一次定义多个变量,包括用不同初始值定义不同类型。 var ( x, y int // 相同类型 a, s = 100, "abc" // 不同类型)简短模式:(short variable...
309 1 分钟

# 缓存和数据库一致性问题 https://zhuanlan.zhihu.com/p/408515044 先更新缓存还是先删除缓存? 1. 先更新缓存,后更新数据库 数据库更新失败,相当于没更新。 2. 先更新数据库,后更新缓存 缓存更新失败,只有等到缓存失效才能得到正确的值。 并发引发的一致性问题 两个线程同时更新同一条数据,出现数据库更新成功,缓存更新失败的问题之类的。 通常解决方案是加 分布式锁 ,线程在修改同一条数据之前先申请分布式锁,拿到锁的线程才允许更新数据库和缓存。 删除缓存可以保证一致性吗 1. 先删除缓存,后更新数据库 数据库更新失败,等于没更新 2....
4.2k 4 分钟

# 与 mongoDB 的区别 MongoDB ElasticSearch 备注 定位 (文档型) 数据库 (文档型) 搜索引擎 一个管理数据,一个检索数据 资源占用 一般 高 mongo 使用 c++, es 使用 Java 开发 写入延迟 低 高 es 的写入延迟默认 1s, 可配置,但是要牺牲一些东西 全文索引支持度 一般 非常好 es 本来就是搜索引擎,这个没啥可比性 有无 Schema 无 无 两者都是无 Schema 支持的数据量 PB+ TB+ ~ PB 两者支持的量并不好说的太死,都支持分片和横向扩展,但是相对来说 MongoDB...
2.8k 3 分钟

# 集群的原理 一个运行中的 Elasticsearch 实例称为一个节点,而集群是由一个或者多个拥有相同 cluster.name 配置的节点组成, 它们共同承担数据和负载的压力。当有节点加入集群中或者从集群中移除节点时,集群将会重新平均分布所有的数据。 当一个节点被选举成为 主 节点时, 它将负责管理集群范围内的所有变更,例如增加、删除索引,或者增加、删除节点等。 而主节点并不需要涉及到文档级别的变更和搜索等操作,所以当集群只拥有一个主节点的情况下,即使流量的增加它也不会成为瓶颈。...
316 1 分钟

# 分析 做全文搜索就需要对文档分析、建索引。从文档中提取词元(Token)的算法称为分词器(Tokenizer),在分词前预处理的算法称为字符过滤器(Character Filter),进一步处理词元的算法称为词元过滤器(Token Filter),最后得到词(Term)。这整个分析算法称为分析器(Analyzer)。 文档包含词的数量称为词频(Frequency)。搜索引擎会建立词与文档的索引,称为倒排索引(Inverted Index)。 Analyzer 按顺序做三件事: 使用 CharacterFilter 过滤字符 使用 Tokenizer 分词 使用 TokenFilter...
963 1 分钟

# 映射 精确值 如它们听起来那样精确。例如日期或者用户 ID,但字符串也可以表示精确值,例如用户名或邮箱地址。对于精确值来讲, Foo 和 foo 是不同的, 2014 和 2014-09-15 也是不同的。 精确值很容易查询。结果是二进制的:要么匹配查询,要么不匹配。这种查询很容易用 SQL 表示: WHERE name = "John Smith" AND user_id = 2 AND date >...
2k 2 分钟

# 并发处理 悲观并发控制 这种方法被关系型数据库广泛使用,它假定每个操作都会有冲突发生,因此阻塞访问资源以防止冲突。 一个典型的例子是读取一行数据之前先将其锁住,确保只有放置锁的线程能够对这行数据进行修改。 乐观并发控制 Elasticsearch 中使用的这种方法是假定冲突不可能发生,并且不会阻塞正在尝试的操作。 然而,如果源数据在读写当中被修改,更新将会失败。应用程序接下来将决定该如何解决冲突。 例如,可以重试更新、使用新的数据、或者将相关情况报告给用户。 Elasticsearch 默认使用乐观并发控制,每个文档都有一个 _version (版本)号,当文档被修改时版本号递增。...
9.7k 9 分钟

# 数据操作 # 集群健康 运行 _cat API curl -X GET "localhost:9200/_cat/health?v"返回内容: epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent1475247709 17:01:49 elasticsearch green 1 1 0 0 0 0 0 0 - 100.0%status...
1.8k 2 分钟

# 基础 # 安装 略 # 使用 demo 如果你正在使用 Java,在代码中你可以使用 Elasticsearch 内置的两个客户端: 节点客户端(Node client) 节点客户端作为一个非数据节点加入到本地集群中。换句话说,它本身不保存任何数据,但是它知道数据在集群中的哪个节点中,并且可以把请求转发到正确的节点。 传输客户端(Transport client) 轻量级的传输客户端可以将请求发送到远程集群。它本身不加入集群,但是它可以将请求转发到集群中的一个节点上。 两个 Java 客户端都是通过 9300 端口并使用 Elasticsearch 的原生 传输...
-->