从hashMap/mysql/redis/到分布式

1 HashMap

问题:从一个大数组(10000)中,找到特定的X。

通常的解答:都是循环遍历一遍,查找X,需要全量IO

优化

把大数据量,分为小数据量(4个数字)的组合。组成了2500个4个小数组。

分而治之,依赖索引 / 路由 / hash 。

X 计算hash值。 hashcode % 2500

HashMap 或者 HashTable 的原理。

优化后的查找过程:计算X的hash值,查找索引(左侧),定位X的大致位置,根据索引查找小数组。一定比全量IO快。

问题:可能数据大部分都落在一个hash值内,效率会降低。

总结:

  1. 只做分治,不一定能够提速。
  2. 大数据查询,要使用分治。

2 mysql

  1. 为什么存数据,要出来这么多的技术?

答:因为要快。

  1. 为什么快?谁快?谁慢?

总结:

  1. 同样的数据,存在文件中,速度慢。但是,存在数据库中,会快很多,为什么?答:下图解决。
  2. 数据库高并发场景,都命中索引,慢?因为什么:吞吐量限制。IO 一秒返回64M,但是总共数据要返回 512M 。数据库有 TPS 、PVS 的阈值限制,超过之后就会很慢。–》分库、分表解决等。
  3. 数据库的硬伤:磁盘IO。

答:datapage 4KB. 做分治。4K对齐。

HDFS block 大小。应该设置符合机器性能,不应该设置太大。

二级索引的作用:避免全量IO(全量遍历索引)的过程。

问题:

  1. 如果要查找的内容,没有做过索引?——也就是索引没有命中。那么就会走全量IO.

怎么解决数据库的问题?

答:数据有特征,不是每个数据每天都要查询,热数据的概念。只要保证热数据访问够快,用户感官上整理快。–》引出:redis、memcache(缓存)。

3 redis

问题1:redis为什么不支持sql。

答:因为redis存储的是部分数据,所以通过sql查询,结果不完整。

问题2:redis 为什么快?

答:以下三点:

  1. worker 单线程模型,所以快。问题:单线程为什么就快?
  2. 使用内存。
  3. 6.x IO 使用多线程。

redis value有类型,每种类型有本地方法。

秒杀场景,一定要用redis。语境:高并发。

串行化:每个server请求加锁。

HBase

区别于redis,能存全量数据。

以上所有内容整理自:马士兵教育,周志垒老师公开课。

【数据存储】从hashMap、mysql、redis、到分布式相关推荐

  1. java sql变更存储,MySQL更改数据库数据存储目录,mysql数据存储

    MySQL更改数据库数据存储目录,mysql数据存储 MySQL数据库默认的数据库文件位于 /var/lib/mysql 下,有时候由于存储规划等原因,需要更改 MySQL 数据库的数据存储目录.下文 ...

  2. 读取股票数据存储到本地MySQL数据库(三)

    此篇是将上篇获取到的股票数据存储到本地mysql数据库. mysql是关系型数据库,为Oracle旗下产品,开源免费.首先下载mysql的安装包,安装完成后设置数据库并启动服务,然后可以通过Navic ...

  3. MySQL 数据存储和优化------MySQL架构原理 ---- (架构---索引---事务---锁---集群---性能---分库分表---实战---运维)持续更新

    Mysql架构体系全系列文章主目录(进不去说明还没写完)https://blog.csdn.net/grd_java/article/details/123033016 本文只是整个系列笔记的第一章: ...

  4. php数据存储mysql_php – 在MySQL中存储路线数据的最佳方式

    我正在开发一个应用程序,它要求我存储一些位置的方向,下面是我试图存储的数据的示例: 方向1 从西部:乘528 East(Beechline),经过机场出口,然后从13号出口驶入Narcoossee R ...

  5. 爬虫数据存储—数据库和MySQL

    爬虫数据存储-数据库 一.什么是数据库? 数据库是一个以某种有组织的方式存储的数据集合.简单来说,我们可以将数据库想象为一个文件柜,文件柜里面有很多文件,这些文件我们称之为表. 举一个实际例子:比如说 ...

  6. mysql读取股票数据_读取股票数据存储到本地MySQL数据库(一)

    主要有三个步骤:(1)从东方财富上爬虫读取到所有股票的codelist:(2)从凤凰网的api获取到某只股票历史上所有数据,开盘收盘价,成交量,成交金额,ma均线价格等数据:(3)通过pymysql将 ...

  7. linux下修改mysql数据存储_linux 更改mysql 数据存储目录

    1.检查mysql数据库存放目录 mysql -u root -prootadmin #进入数据库 show variables like '%dir%'; #查看sql存储路径 (查看datadir ...

  8. mysql的数据是存到本地_读取股票数据存储到本地MySQL数据库(二)

    通过凤凰api获取到json数据. #encoding = utf-8 import requests import json import pandas as pd class GetStockPr ...

  9. Redis分片(分布式缓存)

    分片(partitioning)就是将你的数据拆分到多个 Redis 实例的过程,这样每个实例将只包含所有键的子集. 1 分片何用 Redis 的分片承担着两个主要目标: 允许使用很多电脑的内存总和来 ...

最新文章

  1. readelf和ldd分析elf文件
  2. linux redis 设置日志,linux上redis怎么动态看日志
  3. java update多个字段的值_SQL的update多个字段的写法
  4. 使用EasyMock或Mockito
  5. php having,having方法
  6. 用parsetInt解析数字,并求和
  7. 怎么样用 Google Analytics 区分 Google Shopping 页的流量
  8. ipv6怎么进行邻居学习_事实证明,我的邻居也想学习编码。 他们只是没有意识到这是可能的。
  9. 韩顺平 零基础30天学会Java 学习笔记
  10. [SiFi]三体中英名词翻译chapter1-3
  11. 江南大学c语言课程绩点评分,江南大学无锡医学院课程考核档案管理办法
  12. 实现一个简单的Database1(译文)
  13. 【批量去除图片的背景】
  14. 授人以鱼不如授人以渔——和女儿学一起学成语
  15. 微信小程序项目-最常用网盘助手
  16. if+switch 循环
  17. c语言圆周率小数点后500万位,活久见!德科学家整理出圆周率小数点后500万位数字...
  18. AI+PS插画的运用与制作
  19. cf进服务器显示排位封停,cf枪王排位永久禁赛怎么解封(cf排位赛禁赛原因分析)...
  20. Android 内存优化实践与总结

热门文章

  1. 一个简单可用的C++日志类
  2. 中国软件杯——行人检测与跟踪(GitHub地址:https://github.com/dddlli/Swin-Transformer-Object-Detection-PaddlePaddle)
  3. 拿到天使投资是一种怎样的体验
  4. 7-4 银行排队问题之单窗口“夹塞”版 (30 分) C语言版
  5. Windows 8.1新型启动方式“WIMBoot”基础简介以及初步探索
  6. 东原地产首获“蓝筹地产” 千亿货值业绩增速成亮点
  7. 当前流行搜索引擎爬虫IP列表
  8. 马里奥游戏 java
  9. qt将html加载到资源文件,web页面嵌入到Qt
  10. SwiftUI:属性装饰器的理解@State,@Binding,@ObservedObject,@Published,@Environment,@EnvironmentObject