#sql

MySQL 索引设计概要

Published at April 30, 2019 ·  1 min read

如何正确高效的设计索引,由于 hdd 的特性,随即访问数据是非常耗时的,对于数据库,无论是读取一行还是多行数据,都会将该行或多行所在的页面全部加载进来,然后再读取对应的数据记录。在 mysql 中,页的大小一般为 16 kb,也可能是 8kb,32 kb 或者其他值。数据库等待一个页从磁盘读取到缓存池所需要的成本巨大,需要消耗 10ms 左右的时间,如果顺序读取则会非常快,达到 40MB/s。如果一个页面的大小为 4kb,那么 1s 的时间就可以读取 10000 个页,读取一个页面所花费的平均时间就是 0.1 ms,相比随即读取的 10ms 已经降低了两个数量级,甚至比内存中读取数据还要快。数据库索引设计与优化中,分为宽索引与窄索引,每一个在索引中匹配到的记录行最终都需要执行另外的随即读取从聚集索引中获得剩余的数据,如果结果集非常大,那么就会导致随机读取的次数过多进而影响性能。 MySQL 索引设计概要...


SQL vs NoSQL Database Differences Explained with few Example DB

Published at April 11, 2019 ·  1 min read

非常详细的解释了 sql 和 nosql 之间的区别。1. sql 是基于 table 的,而 nosql 是基于 document,kv 对,图或者 宽表,也就是说在 sql 中,sql 是包含若干 table,而 nosql 则是若干 document 的集合。2. 复杂的查询,我想这也是两者最为关键的区别,sql 可以轻易的完成多种条件关系组合的复杂查询,而 nosql 却将这种复杂的关系固化到 document 的 kv 组合中 3. 两者在 scale 时的区别sql 适合 vertically scalable,也就是说,提高服务器的硬件,比如 ram,cpu,disk 之类即可提高数据库的负载性能,而 nosql 则是需要通过增加数据库服务器的数量来提高负载。4. sql 设计遵循 acid, atomicity, consistency, isolation, durability, nosql 则遵循 cap , consistency, availability and partition tolerance SQL vs NoSQL Database Differences Explained with few Example DB...


SQLAlchemy and Django

Published at March 29, 2019 ·  1 min read

将 Django orm 与 sqlalchemy 结合在一起使用的案例,通过 Django orm 维护 model,实现写以及一些简单的查询功能,然后通过 sqlalchemy 实现复杂的只读查询。django orm 虽然可以通过 extra 实现与原生 sql 语句的融合,但通过 sqlalchemy 的 join 查询相比于 rawl sql 更加安全些 SQLAlchemy and Django...


Five sharding data models and which is right

Published at March 28, 2019 ·  1 min read

五种不同的 sharding 方式,分别是: 1. sharding by customer or tenant, 方便SaaS 及 ERP 2. sharding by geography, 方便多地域的服务。3. sharding by entity id,最常见的一种方式。 4. sharding a graph, 在Facebook Instagram 这种社交网站中较为流行,采用 图数据库。5. time partitioning, 适合于时间序列的数据,常见于各种日志。 Five sharding data models and which is right...


3 ways to detect slow queries in PostgreSQL - Cybertec

Published at March 28, 2019 ·  1 min read

几种检测 postgresql 慢查询的方法,针对全库,需要开启慢查询的日志打印,另外配合 explain 确认查询的方式,是索引还是顺序查询等。最后一个则是利用 pg_stat_statements 查看查询的数量、时间等状态信息。 3 ways to detect slow queries in PostgreSQL - Cybertec...


为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?你们具体是如何对数据库如何进行垂直拆分或水平拆分的?

Published at March 20, 2019 ·  1 min read

为何要分库分表,单表适合的上限为 200万 条,单库适合的并发上限是 2000 qps。包括分库分表的方式,range 和 hash。 为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?你们具体是如何对数据库如何进行垂直拆分或水平拆分的?...


Tags

abcs accept acid activemq affinity algorithm allocation android array async aws b+tree b-tree backoff benchmark best-practices bfs big-o bigquery bind bitcount blog break broker bubble buffer cache cap cert cgroups channel citus class classmethod cluster concurrency config consumer container cookie cors crawler cronjob csrf ctr data-science data-structure database datadog dataflow datascience decorator defer dfs distributed django dns docker double-shipping drf ecosia elastic-search enumerate epoll extra fabric2 facebook-pixel financial-report flask flutter forward-proxy freelance frontend frp garbage-collector gc gcp generator get gil git golang goroutine graphql ha handbook haproxy hash hash-slot hashring hashtable hpa http http-auth http-proxy http_proxy https index init innodb instagram intergration interview ios javascript jinja2 jobboard jwt k8s kafka kibana kqueue label lambda layer4 layer7 lean levels.io linked-list linux list listen loadbalancer logs long-tail lru marketing master matplotlib memory merge metaclass metaprogramming metrics metrics-server microservices mitm model mq myisam mysql namespace nat netflix network-extension nginx nodejs nomad nosql npm oodesign openssl optimization orm pandas parallelism paramiko parkinglot patroni permission pg pipeline pixelme post postgresql postresql prefetch_related prerender private-key process proxy proxycommand put pvm python queue rabbitmq rbac react-native reactjs rebase redis redis-cluster replication resource rest restfulapi retargeting retry revenue reverse-proxy rocketmq rsa saas scaleable search-engine security select seo serverless service session set shadosocks shadowsocks shard sharding shell shopify sigint signal sigterm slack slave slow-query sniper sns socket socks5 source-code spa sql sqlalchemy sqs ssh ssl ssl-pinning stack startup state stateful stateless staticmethod string struct swift switch syscall system-design systemctl tcp tcp-proxy thread tmpreaper token traefik trustkit tunning type typeform udp variable vc vpn vuejs web web-development where yarn zset 削峰 宽索引 异步 窄索引 解耦 跨域 跳板机


Archives

2019 (141)