zoukankan      html  css  js  c++  java
  • 了解和熟悉数据库相关知识

    ---恢复内容开始---

      工作中接触到的数据库已经很多了,下面来总结一下,也熟悉一下。

    数据库种类:

        数据库种类也很多,有成熟且稳定的 MySQL 数据库,有后起之秀的 MongoDB 数据库,也有新时代宠儿 Redis 数据库。除此之外,还有其他一些数据库,例如 SqliteOracle 等。  

    那么问题来了,面对多种类型的数据库,自己该如何选择? 

    或许你因个人比较喜欢 MySql 数据库,所以选择它。也许你在网络上查了一下资料,发现别人都推荐使用 MongoDB,所以就选择它。 

    这两种想法都是不能正确地选择。任何脱离业务来谈架构都是在瞎扯。因此,要根据项目业务的场景需求来决定选择哪种数据库。每种数据库都各有优缺点,而选取标准是选择最优,最适合。 

    我个人的理解是结合以下几个方面来考虑:

    1 读写速度

    这存储数据方式往往决定读写的速度。

    • MySQL 无论数据还是索引都存放在硬盘中。到要使用的时候才交换到内存中。能够处理远超过内存总量的数据。

    • MongoDB 的所有数据实际上是存放在硬盘的,所有要操作的数据通过 mmap 的方式映射到内存某个区域内。然后,MongoDB 就在这块区域里面进行数据修改,避免了零碎的硬盘操作。

    • Redis 所有数据都是放在内存中的。但是它也支持数据持久化到硬盘中。 

    我们都知道磁盘读取数据的效率远远低于内存。所以在一般情况下,这三者的读写数据的速度排序是:Redis > MongoDB > MySQL 

    2 是否支持事务以及复杂查询

    • MySQL 是关系型数据库,支持事务操作以及 join 方式的复结构化查询。
    • MongoDB 是非关系型数据库, 既不支持事务操作,也不支持 join 操作。
    • Redis 同样不支持。 

    因此,针对以下场景应考虑使用 MySQL:
    1)业务数据中有大量结构化数据,如用户账号、地址等。因为这些数据通常需要做结构化查询。
    2)业务存在许多事务性操作,需要保证事务的强一致性。 

    3 业务数据量增长速度

    在一到两年内,业务数据的增长量不在预测范围内,优先考虑使用 MongoDB。

     因为 MongoDB 内建了sharding、很多数据分片的特性,容易水平扩展,比较好的适应大数据量增长的需求。而 MySql 在这方面表现要逊色些,MySql 单表数据量达到 5-10 G 时会出现明细的性能降级,需要做数据的水平和垂直拆分、库的拆分完成扩展。

     Redis 由于内存容量限制,不会用来存储大量数据。一般拿它做缓存。 

    4 表结构是否明确

    如果在业务场景中,数据库表接口不明确,数据还在不断增加。例如以下场景,内容管理平台(如 BBS 论坛中帖子场景),用户社交平台(如贴吧中的帖子以及用户评论),优先考虑使用 MangDB 。

    因为 MongoDB 是非结构化文档数据库,扩展字段很容易且不会影响原有数据。

    写在最后,数据库作为存储数据的容器, 在架构选择上,应多花点时间考虑。

      下面贴出一些工作中经常使用到的一些SQL。

    根据表名,查询库名称:  MySQL

    1 SELECT table_schema FROM information_schema.TABLES WHERE table_name = 't_vehicle';

    根据字段名,查询表名:MySQL

    1 SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME like '%virtual_number%';

    • 来认识一下MangoDB 数据库
    • 使用工具:Robo 3T 

    来张图认识一下,最为直观了。

    再来一张:支持SQL语句(应该是工具)

    对于MangoDB,工作中使用的功能只是简单查询而已。

    • 简单使用说明

    1.查询: find() 方法

    MongoDB 查询文档使用 find() 方法。

    示例:

    查询vehicle表中,uid=1031855654694822917的文档

    db.vehicle.find({'uid':'1031855654694822917'})

    2.AND条件

    MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件

    3.OR条件

    MongoDB OR 条件语句使用了关键字 $or

    db.vehicle.find({$or:[{'uid':'1032080726311314439'},{'uid':'1031786386556986377'}]})

     

  • 相关阅读:
    Unity编辑器
    Unity编辑器
    Unity编辑器
    MaxScript代码补全插件
    学习用MaxScipt批处理Max文件
    Unity编辑器
    Unity编辑器
    节属性 转 页属性
    在挂起的进程中创建一个远程线程
    Sql server 级联删除
  • 原文地址:https://www.cnblogs.com/ruichow/p/9562604.html
Copyright © 2011-2022 走看看