Filed

为什么 ElasticSearch 比 MySQL 更适合复杂条件搜索

时光总嘲笑我的痴心妄想 提交于 2021-02-19 22:49:33
点击上方" 程序员历小冰 ",选择“置顶或者星标” 你的关注意义重大! 熟悉 MySQL 的同学一定都知道,MySQL 对于复杂条件查询的支持并不好。MySQL 最多使用一个条件涉及的索引来过滤,然后剩余的条件只能在遍历行过程中进行内存过滤,对这个过程不了解的同学可以先行阅读一下 《MySQL复杂where条件分析》 。 上述这种处理复杂条件查询的方式因为只能通过一个索引进行过滤,所以需要进行大量的 I/O 操作来读取行数据,并消耗 CPU 进行内存过滤,导致查询性能的下降。 而 ElasticSearch 因其特性,十分适合进行复杂条件查询,是业界主流的复杂条件查询场景解决方案,广泛应用于订单和日志查询等场景。 下面我们就一起来看一下,为什么 ElasticSearch 适合进行复杂条件查询。 ElasticSearch 简介 Elasticsearch 是开源的实时分布式搜索分析引擎,内部使用 Lucene 做索引与搜索。它提供"准实时搜索"能力,并且能动态集群规模,弹性扩容。 Elasticsearch 使用 Lucene 作为其全文搜索引擎,用于处理纯文本的数据,但 Lucene 只是一个库,提供建立索引、执行搜索等接口,但不包含分布式服务,这些正是 Elasticsearch 做的。 下面,我们来介绍一下 ElasticSearch 的相关概念。为了便于初学者理解

MySQL基础语句

僤鯓⒐⒋嵵緔 提交于 2021-02-08 21:05:10
###查看语句 查看所有数据库 show databases; 查看表结构 desc table_name; 查看库中所有表 show tables; 查看建表语句 show create table <table_name> ; ###新建表语句 新建表: id int unsigned not null auto_increment comment '用户id', uesr_name varchar(20) not null comment '用户名', email varchar(50) not null comment '用户邮箱', age tinyint unsigned not null comment '用户年龄', fee decimal(10,2) not null default 0.00 comment '用户余额', created_at timestamp not null comment '注册时间', primary key(id) ); Filed Type Null Key Default Extra id int(10) NO PRI NUll auto_increment uesr_name varchar(20) NO NUll email varchar(50) NO NUll age tinyint NO NUll fee

《Redis开发与运维》读书笔记(一)

江枫思渺然 提交于 2021-02-08 19:00:00
全局命令 查看所有的键(遍历所有key,慢查询之一) keys * 键总数(redis内部维护的计数器,并不会扫描全库) dbsize 检查键是否存在 exists key 删除键 del key1 key2... 过期设置 expire key seconds 获取数据类型 type key 数据结构与内部编码 string: int embstr raw hash: hashtable ziplist list: quicklist set: hashtable intset zset: skiplist ziplist 单线程与I/O多路复用模型 客户端到服务端模型 发送命令 执行命令 进入命令队列 返回结果 为什么快 纯内存访问(主要) 非阻塞io:依赖linux内核中的多路复用IO接口 epoll ,自编写一套处理模型(不依赖于其他事件模型)将epoll中的连接、读写、关闭都转换为事件 单线程避免了线程切换以及线程竞争的开销,单线程也简化了数据结构与算法的实现,坏处是对于慢查询非常敏感,一个慢查询将阻塞之后所有的命令 数据结构的概览 字符串 命令 命令 时间复杂度 set key value O(1) get key O(1) del key [key ...] O(k) mset key value [key value ...] O(k) mget key [key

Redis简单使用

我与影子孤独终老i 提交于 2021-02-05 16:41:27
Redis 知识点 redis的全称为远程字典服务器 Redis中文网 中Redis的介绍: Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings) , 散列(hashes) , 列表(lists) , 集合(sets) , 有序集合(sorted sets) 与范围查询, bitmaps , hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication) , LUA脚本(Lua scripting) , LRU驱动事件(LRU eviction) , 事务(transactions) 和不同级别的 磁盘持久化(persistence) , 并通过 Redis哨兵(Sentinel) 和自动 分区(Cluster) 提供高可用性(high availability)。 1. 为什么使用Redis redis是一种内存字典,访问速度远快于访问磁盘 随着文件变大,一个data page默认4k,这意味着在没有一个类似B+树的索引时查找一个大文件中的磁盘数据需要的寻址时间变长 随着访问量增加和需要取出的数据量变大磁盘I/O变大,而磁盘带宽有限 关系型数据库必须给出schema类型(字节宽度)以利于存储

Django Rest framework 之 序列化

▼魔方 西西 提交于 2021-01-23 04:53:12
RESTful 规范 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) django rest framework 之 版本(四) django rest framework 之 解析器(五) django rest framework 之 序列化(六) django rest framework 之 分页(七) django rest framework 之 视图(八) 一、前言 先建立数据库,并添加相应的数据,用来后面序列化使用 1、建立数据库模型 为数据建立相应的数据库模型,并且有一对一,多对多,外键关联。 from django.db import models class UserGroup(models.Model): title = models.CharField(max_length=32) class UserInfo(models.Model): user_type_choices = ( (1,'普通用户'), (2,'VIP'), (3,'SVIP'), ) user_type = models.IntegerField(choices=user_type_choices) username = models.CharField

django-orm查询条件的使用

那年仲夏 提交于 2021-01-11 08:19:14
查询条件 常用条件 exact iexact contains icontains in range date year time 关联表查询 比较运算 gt gte lt lte 常用条件 exact 使用 exact 相当于是SQL层面的=,如果赋值为None,则在SQL层面将被解释为null。 book = Book . objects . filter ( id__exact = 1 ) book = Book . objects . filter ( id__exact = None ) 以上两条查找语句在SQL底层的语句为: select * from book where id = 1 ; select * from book where id IS NULL ; iexact 使用 iexact 相当于是SQL层面的like。 book = Book . objects . filter ( id__iexact = 1 ) 以上查找语句在SQL底层的语句为: select * from book where id like '1' ; contains 大小写敏感的匹配查询,相当于like,语句转化后两边都有%。 book = Book . objects . filter ( name__contains = 'Hello' ) 以上查找语句在SQL底层的语句为

Django中条件过滤:按时间筛选

瘦欲@ 提交于 2021-01-10 14:56:18
你有没有遇到过,需要按时间筛选的问题? 我在models中的字段为dateTimeField,那么我该如何构造一个时间格式来和它比较呢? 索性我们有 datetime模块 import datetime now = datetime.datetime.now() # 获取现在的时间 start = datetime.timedelta(hours=23,minutes=59,seconds=59) # 获取当前时间中的一天内的开始时间 # 查询一天内的数据 model.objects.filter(date_time_field__gt=start) 其实这就没了,也就这么多的东西,哦,还有一些: gt====大于 gte===大于等于 lt=====小于 lte====小于等于 那如果要查一个时间段呢? 我们用 __range start = datetime.date(2018,7,12 ) end = datetime.date(2018,7,13 ) model.objects.filter(date_time_filed__range =(start,end)) 查询某年 __year 查询某月 __month 查询某天 __day 查询星期几__week__day 来源: oschina 链接: https://my.oschina.net/u/4264025/blog

Redis 命令大全 看这一篇就满足日常工作

家住魔仙堡 提交于 2021-01-07 14:43:31
redis键(key) 常用命令 命令 注释 keys * 获取所有的key select 0(库角标) 选择第几个库 move key 0(库角标) 将当前的数据库key移动到某个数据库,目标库有,则不能移动 flush 0(库角标) 清除指定库 randomkey 获取随机key type key key的类型 set key value 设置key和value get key 获取key的value mset key1 value1 key2 value2 批量设置key、value mget key1 key2 key3 批量获取value del key 删除key exists key 判断是否存在key expire key second(秒) 给key设置过期时间 pexpire key millisecond (毫秒) 给key设置过期时间 persist key 删除过期时间,持久保存key String类型 简介 String是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。 String类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。 String类型是Redis最基本的数据类型,一个redis中字符串value最多可以是 512M 存储结构类似:

《Java编程思想》笔记 第十四章 类型信息

故事扮演 提交于 2021-01-06 10:11:47
1.RTTI:在运行时识别一个对象类型 JAVA在运行时 有时要 识别对象和类的信息这个机制叫RTTI。Java提供了两种机制去做这件事。传统的RTTI 和 反射。 传统的RTTI 假定编译时就已经知道了所有的类型。 反射 允许在运行时发现和使用类型信息 传统的RTTI 在编译期通过Class文件识别类型信息,反射在运行期通过Class文件识别类型信息。 Java类型转换都发生在运行时期。 2.Class对象 Class对象是由Class这个类产生的,它包含了与某个类有关的信息。 每个类都有Class对象,即编译了一个新类就会产生一个该类的Class对象,并且保存在.class文件中。Class对象就是用来产生“常规”对象的。 Java使用Class对象来执行RTTI。 所有类都是第一次使用时动态加载到jvm中。 动态加载就是需要时再加载不使用不加载。 只要创建了对一个类的静态成员的引用就会加载该类。new 的时候加载类说明 类的构造器虽然没写static但也是静态方法。 一个类的Class对象载入内存后,他就会用来创建该类的对象。 2.1 获得Class对象 Class类的静态方法forName()可以通过传入一个 全限定类名(包含包名) 返回一个该 类 的Class类对象引用,此时该 类 会被加载到内存。 Class.forName("thinking14class.Test"

MySQL总结

时光总嘲笑我的痴心妄想 提交于 2021-01-02 10:49:13
一、数据库简介 1、MySQL数据库介绍 MySQL是一个关系型数据库管理系统,有瑞典MySQL AB公司开发,后来被sun公司收购,sun公司后来后被Oracle公司收购,目前是Oracle旗下产品。 MySQL开源,支持多平台、免费、使用范围广,是了解学习关系型数据库的首选。 特点: 1、使用c和c++编写,并使用了多种编译器进行测试没保证源代码的可移植性 2、支持多种操作系统,如linux、windows、unix等 3、为多种编程语言提供了API。如c++、c、java、python、PHP等 4、优化的SQL查询算法,有效地提高查询速度 5、可以处理拥有上千万条记录的大型数据库 6、使用标准的SQl数据语言形式 2、数据库定义 数据存储-数据库阶段 数据库:是指长期存储在计算机内,有组织的数据集合,简而言之,数据库就是一个存储数据的地方。 表:是数据库中存储的基本单位,数据按照分类存储到不同的表中,能够非常高效的查询其中的数据。 二、SQL语言 1、SQL语言定义 Structured Query Language 结构化查询语言 SQL是一门特殊的语言,专门用来操作关系型数据库,当前关系型数据库都支持使用SQL语言进行操作,也就是说可以通过SQL语言操作Oracle、mysql、SqlServer、sqlite等等所有的关系型数据库。 2、SQL语言主要分为: DQL