【数据存储】从hashMap、mysql、redis、到分布式
从hashMap/mysql/redis/到分布式
1 HashMap
问题:从一个大数组(10000)中,找到特定的X。
通常的解答:都是循环遍历一遍,查找X,需要全量IO。
优化
把大数据量,分为小数据量(4个数字)的组合。组成了2500个4个小数组。
分而治之,依赖索引 / 路由 / hash 。
X 计算hash值。 hashcode % 2500
HashMap 或者 HashTable 的原理。
优化后的查找过程:计算X的hash值,查找索引(左侧),定位X的大致位置,根据索引查找小数组。一定比全量IO快。
问题:可能数据大部分都落在一个hash值内,效率会降低。
总结:
- 只做分治,不一定能够提速。
- 大数据查询,要使用分治。
2 mysql
- 为什么存数据,要出来这么多的技术?
答:因为要快。
- 为什么快?谁快?谁慢?
总结:
- 同样的数据,存在文件中,速度慢。但是,存在数据库中,会快很多,为什么?答:下图解决。
- 数据库高并发场景,都命中索引,慢?因为什么:吞吐量限制。IO 一秒返回64M,但是总共数据要返回 512M 。数据库有 TPS 、PVS 的阈值限制,超过之后就会很慢。–》分库、分表解决等。
- 数据库的硬伤:磁盘IO。
答:datapage 4KB. 做分治。4K对齐。
HDFS block 大小。应该设置符合机器性能,不应该设置太大。
二级索引的作用:避免全量IO(全量遍历索引)的过程。
问题:
- 如果要查找的内容,没有做过索引?——也就是索引没有命中。那么就会走全量IO.
怎么解决数据库的问题?
答:数据有特征,不是每个数据每天都要查询,热数据的概念。只要保证热数据访问够快,用户感官上整理快。–》引出:redis、memcache(缓存)。
3 redis
问题1:redis为什么不支持sql。
答:因为redis存储的是部分数据,所以通过sql查询,结果不完整。
问题2:redis 为什么快?
答:以下三点:
- worker 单线程模型,所以快。问题:单线程为什么就快?
- 使用内存。
- 6.x IO 使用多线程。
redis value有类型,每种类型有本地方法。
秒杀场景,一定要用redis。语境:高并发。
串行化:每个server请求加锁。
HBase
区别于redis,能存全量数据。
以上所有内容整理自:马士兵教育,周志垒老师公开课。
【数据存储】从hashMap、mysql、redis、到分布式相关推荐
- java sql变更存储,MySQL更改数据库数据存储目录,mysql数据存储
MySQL更改数据库数据存储目录,mysql数据存储 MySQL数据库默认的数据库文件位于 /var/lib/mysql 下,有时候由于存储规划等原因,需要更改 MySQL 数据库的数据存储目录.下文 ...
- 读取股票数据存储到本地MySQL数据库(三)
此篇是将上篇获取到的股票数据存储到本地mysql数据库. mysql是关系型数据库,为Oracle旗下产品,开源免费.首先下载mysql的安装包,安装完成后设置数据库并启动服务,然后可以通过Navic ...
- MySQL 数据存储和优化------MySQL架构原理 ---- (架构---索引---事务---锁---集群---性能---分库分表---实战---运维)持续更新
Mysql架构体系全系列文章主目录(进不去说明还没写完)https://blog.csdn.net/grd_java/article/details/123033016 本文只是整个系列笔记的第一章: ...
- php数据存储mysql_php – 在MySQL中存储路线数据的最佳方式
我正在开发一个应用程序,它要求我存储一些位置的方向,下面是我试图存储的数据的示例: 方向1 从西部:乘528 East(Beechline),经过机场出口,然后从13号出口驶入Narcoossee R ...
- 爬虫数据存储—数据库和MySQL
爬虫数据存储-数据库 一.什么是数据库? 数据库是一个以某种有组织的方式存储的数据集合.简单来说,我们可以将数据库想象为一个文件柜,文件柜里面有很多文件,这些文件我们称之为表. 举一个实际例子:比如说 ...
- mysql读取股票数据_读取股票数据存储到本地MySQL数据库(一)
主要有三个步骤:(1)从东方财富上爬虫读取到所有股票的codelist:(2)从凤凰网的api获取到某只股票历史上所有数据,开盘收盘价,成交量,成交金额,ma均线价格等数据:(3)通过pymysql将 ...
- linux下修改mysql数据存储_linux 更改mysql 数据存储目录
1.检查mysql数据库存放目录 mysql -u root -prootadmin #进入数据库 show variables like '%dir%'; #查看sql存储路径 (查看datadir ...
- mysql的数据是存到本地_读取股票数据存储到本地MySQL数据库(二)
通过凤凰api获取到json数据. #encoding = utf-8 import requests import json import pandas as pd class GetStockPr ...
- Redis分片(分布式缓存)
分片(partitioning)就是将你的数据拆分到多个 Redis 实例的过程,这样每个实例将只包含所有键的子集. 1 分片何用 Redis 的分片承担着两个主要目标: 允许使用很多电脑的内存总和来 ...
最新文章
- readelf和ldd分析elf文件
- linux redis 设置日志,linux上redis怎么动态看日志
- java update多个字段的值_SQL的update多个字段的写法
- 使用EasyMock或Mockito
- php having,having方法
- 用parsetInt解析数字,并求和
- 怎么样用 Google Analytics 区分 Google Shopping 页的流量
- ipv6怎么进行邻居学习_事实证明,我的邻居也想学习编码。 他们只是没有意识到这是可能的。
- 韩顺平 零基础30天学会Java 学习笔记
- [SiFi]三体中英名词翻译chapter1-3
- 江南大学c语言课程绩点评分,江南大学无锡医学院课程考核档案管理办法
- 实现一个简单的Database1(译文)
- 【批量去除图片的背景】
- 授人以鱼不如授人以渔——和女儿学一起学成语
- 微信小程序项目-最常用网盘助手
- if+switch 循环
- c语言圆周率小数点后500万位,活久见!德科学家整理出圆周率小数点后500万位数字...
- AI+PS插画的运用与制作
- cf进服务器显示排位封停,cf枪王排位永久禁赛怎么解封(cf排位赛禁赛原因分析)...
- Android 内存优化实践与总结
热门文章
- 一个简单可用的C++日志类
- 中国软件杯——行人检测与跟踪(GitHub地址:https://github.com/dddlli/Swin-Transformer-Object-Detection-PaddlePaddle)
- 拿到天使投资是一种怎样的体验
- 7-4 银行排队问题之单窗口“夹塞”版 (30 分) C语言版
- Windows 8.1新型启动方式“WIMBoot”基础简介以及初步探索
- 东原地产首获“蓝筹地产” 千亿货值业绩增速成亮点
- 当前流行搜索引擎爬虫IP列表
- 马里奥游戏 java
- qt将html加载到资源文件,web页面嵌入到Qt
- SwiftUI:属性装饰器的理解@State,@Binding,@ObservedObject,@Published,@Environment,@EnvironmentObject