技术分享 | MySQL 在 NoSQL 领域冲锋陷阵

基于车牌识别的停车收费系统的设计与实现(源码+开题) 本系统(程序源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景: 随着城市化进程的加速和汽车保有量的增加,停车难成为了一个普遍存在的问题。传统的停车收费方式存在着效率低下、管理混乱等问题。因此,开发一款基于车牌识别的停车收费系统具有重要的现实意义。研究意义: 基于车牌识别的停车收费系统可以有效地解决传统停车收费方式在效率和准确性方面的问题,提高停车服务的效率和质量。 阅读详情

作者:杨涛涛

背景

文章内容又是来源于客户的一个问题。

问题描述:

我们现在后台数据库全部为 MySQL,前端开发也非常熟悉 MySQL。但是现在有新的的业务进来。数据模型非常灵活,没有固定的表结构。起初我们考虑过 MySQL 的 memcached API。但是说实话非常鸡肋,没法全面的放开使用。这部分我们有考虑过 NoSQL 数据库,但是如果要部署 NoSQL 数据库,我们又得经过一系列的测试验证。请问 MySQL 关于这一块有没有好的解决方案?

我的答案:

可以,完全可以! MySQL X API 完全可以取代 NoSQL 数据库。而且这个功能从 MySQL 5.7 就有了。MySQL 5.7 也发布几年了,完全可以直接拿来用。

MySQL X

要使用 MySQL X 协议,必须在 MySQL 启动的时候,在配置文件中加入参数 mysqlx_port

#my.cnf
[mysqld]
port=3305 --原始传统的 mysql 端口
mysqlx_port=33050 --mysql x 协议端口

拿最火的 NoSQL 数据库 mongoDB 和 MySQL 来做对比。先举个插入表的简单例子:

在 mongoDB 的表 f1 (字段 x y z) 中插入 10 条记录,

# mongodb shell
> use ytt
> switched to db ytt

# 定义一个 js 数组,
> var c1 = [] 
> for (var i = 0;i < 10;i++){
> ... c1.push({'x':i,'y':i*2,'z':i+100}) 
> ... }
> 10
 
# 插入刚才的数组
> db.f1.insert(c1);
> BulkWriteResult({
> "writeErrors" : [ ],
> "writeConcernErrors" : [ ],
> "nInserted" : 10,
> "nUpserted" : 0,
> "nMatched" : 0,
> "nModified" : 0,
> "nRemoved" : 0,
> "upserted" : [ ]
> })

# 现在记录数为 10
> db.f1.count()
> 10

# 拿出第一条
> db.f1.find().limit(1).pretty();
{
	"_id" : ObjectId("5e0066a54af3d32384342edd"),
	"x" : 0,
	"y" : 0,
	"z" : 100
}

刚才 mongoDB 的例子,在 MySQL 里的实现也非常非常的简单。

# mysql-shell
# 创建一张表 f1
MySQL  ytt-pc:33050+ ssl  ytt  JS > db.createCollection('f1')
<Collection:f1>

# 依然定义同样的数组c1
MySQL  ytt-pc:33050+ ssl  ytt  JS > var c1 = []
MySQL  ytt-pc:33050+ ssl  ytt  JS > for (var i = 0;i<10;i++) { c1.push({'x':i,'y':i*2,'z':i+100})}
10

# 插入刚才的记录
MySQL  ytt-pc:33050+ ssl  ytt  JS > db.f1.add(c1)
Query OK, 10 items affected (0.0058 sec)	
Records: 10  Duplicates: 0  Warnings: 0

# 查看总行数
MySQL  ytt-pc:33050+ ssl  ytt  JS > db.f1.count();
10

# 拿出一条记录
MySQL  ytt-pc:33050+ ssl  ytt  JS > db.f1.find().limit(1);
{
    "x": 0,
    "y": 0,
    "z": 100,
    "_id": "00005e006018000000000000000b"
}
1 document in set (0.0003 sec)

那上面是一个基础的插入,再来看下其他操作,比如更新、删除

# mysql-shell
# 把字段 x 值为 1 的记录更新为 MySQL 

MySQL  ytt-pc:33050+ ssl  ytt  JS > db.f1.modify('x=1').set('x','mysql')
Query OK, 1 item affected (0.0047 sec)
Rows matched: 1  Changed: 1  Warnings: 0

# 检索 x='mysql' 的记录
MySQL  ytt-pc:33050+ ssl  ytt  JS > db.f1.find("x='mysql'")
{
    "x": "mysql",
    "y": 2,
    "z": 101,
    "_id": "00005e006018000000000000000c"
}
1 document in set (0.0006 sec)

# 更新字段 y 值为 'dble' 没有 where 过滤条件,也就是更新全表
MySQL  ytt-pc:33050+ ssl  ytt  JS > db.f1.modify("true").set('x','dble')
Query OK, 10 items affected (0.0075 sec)	
Rows matched: 10  Changed: 10  Warnings: 0

MySQL  ytt-pc:33050+ ssl  ytt  JS > db.f1.find();
{
    "x": "dble",
    "y": 0,
    "z": 100,
    "_id": "00005e006018000000000000000b"
}
...
{
    "x": "dble",
    "y": 18,
    "z": 109,
    "_id": "00005e0060180000000000000014"
}
10 documents in set (0.0010 sec)

MySQL  ytt-pc:33050+ ssl  ytt  JS > 
 
# 比如现在要把刚才的 c1 数组嵌入到字段 x 中,该怎么做呢?
 
# 把 x 置为空数组
MySQL  ytt-pc:33050+ ssl  ytt  JS > db.f1.modify("true").set("x",[])
Query OK, 10 items affected (0.0048 sec)
Rows matched: 10  Changed: 10  Warnings: 0

# 用 array push 的方法更新字段 x

 MySQL  ytt-pc:33050+ ssl  ytt  JS > db.f1.modify("true").arrayAppend("$.x",c1);
Query OK, 10 items affected (0.0064 sec)

Rows matched: 10  Changed: 10  Warnings: 0

# 查看刚才更新的结果(简化显示)
MySQL  ytt-pc:33050+ ssl  ytt  JS > db.f1.find()
{
    "x": [
        [
            {"x": 0, "y": 0, "z": 100},
            { "x": 1,"y": 2,"z": 101},
            {"x": 2,"y": 4,"z": 102},
            {"x": 3,"y": 6,"z": 103},
            {"x": 4,"y": 8,"z": 104},
            {"x": 5,"y": 10,"z": 105},
            {"x": 6,"y": 12,"z": 106},
            {"x": 7,"y": 14,"z": 107},
            {"x": 8, "y": 16,"z": 108},
            {"x": 9,"y": 18,"z": 109}
        ]
    ],
    "y": 0,
    "z": 100,
    "_id": "00005e006018000000000000000b"
},
...	
10 document in set (0.0003 sec)

# 那看下删除操作

MySQL  ytt-pc:33050+ ssl  ytt  JS > db.f1.remove('true');
Query OK, 10 items affected (0.0032 sec)

# 数据已全部清空
MySQL  ytt-pc:33050+ ssl  ytt  JS > db.f1.find()
Empty set (0.0003 sec)

那最重要的是查询。查询通过 find() 方法过滤。看下面的例子。

#mysql-shell
# 重新插入 10W 条记录
MySQL  ytt-pc:33050+ ssl  ytt  JS > db.f1.remove('true');
Query OK, 10 items affected (0.0043 sec)

MySQL  ytt-pc:33050+ ssl  ytt  JS > var c1 = []
MySQL  ytt-pc:33050+ ssl  ytt  JS > for (var i =0;i< 100000;i++){c1.push({'x':i,'y':2*i,'z':i+100})}
100000

MySQL  ytt-pc:33050+ ssl  ytt  JS > db.f1.add(c1)
Query OK, 100000 items affected (2.5686 sec)
Records: 100000  Duplicates: 0  Warnings: 0

# 拿出过滤条件为 x>100 and x < 200 的记录,倒序输出前两条记录
MySQL  ytt-pc:33050+ ssl  ytt  JS > db.f1.find('x >100 and x < 200').sort(' x desc').limit(2)
{
    "x": 199,
    "y": 398,
    "z": 299,
    "_id": "00005e00601800000000000000e6"
}
{
    "x": 198,
    "y": 396,
    "z": 298,
    "_id": "00005e00601800000000000000e5"
}
2 documents in set (0.0766 sec)

# 查询时间 0.0766 秒

# 给字段 x 加一个索引,也非常方便
MySQL  ytt-pc:33050+ ssl  ytt  JS > db.f1.createIndex('idx_x',{fields:[{'field':'$.x','type':'int'}]});
Query OK, 0 rows affected (0.2854 sec)

MySQL  ytt-pc:33050+ ssl  ytt  JS > db.f1.find('x >100 and x < 200').sort(' x desc').limit(2)
{
    "x": 199,
    "y": 398,
    "z": 299,
    "_id": "00005e00601800000000000000e6"
}
{
    "x": 198,
    "y": 396,
    "z": 298,
    "_id": "00005e00601800000000000000e5"
}
2 documents in set (0.0004 sec)
# 查询时间0.0004秒


# 执行事物块更简单,转而使用 session 对象
# 类似 start transaction 语句
MySQL  ytt-pc:33050+ ssl  ytt  JS > session.startTransaction()
Query OK, 0 rows affected (0.0002 sec)

MySQL  ytt-pc:33050+ ssl  ytt  JS > db.f1.remove('x=1')
Query OK, 1 item affected (0.0004 sec)
MySQL  ytt-pc:33050+ ssl  ytt  JS > db.f1.find('x=1')
Empty set (0.0004 sec)

# 类似 rollback 语句
MySQL  ytt-pc:33050+ ssl  ytt  JS > session.rollback()
Query OK, 0 rows affected (0.0014 sec)

# 这条记录还在
MySQL  ytt-pc:33050+ ssl  ytt  JS > db.f1.find('x=1')
{
    "x": 1,
    "y": 2,
    "z": 101,
    "_id": "00005e0060180000000000000020"
}
1 document in set (0.0004 sec)

总结

以上我举了几个经典的例子来说明 MySQL 可以直接做为 NoSQL 数据库来使用,具备了本该有的功能。比如增删改查、建索引、事务等等。甚至可以说完全替代 mongoDB。

DMTF相关协议(一):Redfish和SMBIOS Redfish 是一种管理标准,使用超媒体 RESTful 接口中的数据模型表示。该模型以标准的、机器可读的模式表示,消息的有效负载以 JSON 表示。该协议本身利用了 OData v4。由于它是一个超媒体 API,因此能够通过一致的接口表示各种实现。它具有管理数据中心资源、处理事件、长时间任务和发现的机制。 阅读详情

相关推荐

react +ant desiagn pro实现按钮操作权限控制

在ant desiagn pro中提供了一个access用于对权限进行控制,需引入useAccess和Access

Sylvasylva的博客 2211

cap理论具体含义_如何正确理解CAP理论?

如何正确理解CAP理论?在大数据领域,被业界广泛谈及的CAP理论存在着一些关键性的认知误区,而只有全面地考察与分析分布式环境中的各种场景,我们才能真正正确地理解它。目前,CAP(Consistency一致性、Availability可用性、Partition-tolerance分区可容忍性)理论普遍被当作是大数据技术的理论基础。同时,根据该理论,业界有一种非常流行、非常“专业”的认识,那就是:关系...

weixin_39958631的博客 1261

LDA主题模型简介及Python实现

一、LDA主题模型简介 LDA主题模型主要用于推测文档的主题分布,可以将文档集中每篇文档的主题以概率分布的形式给出根据主题进行主题聚类或文本分类。 LDA主题模型不关心文档中单词的顺序,通常使用词袋特征(bag-of-word feature)来代表文档。词袋模型介绍可以参考这篇文章:文本向量化表示——词袋模型 - 知乎 了解LDA模型,我们需要先了解LDA的生成模型,LDA认为一篇文章是怎么形成的呢? LDA模型认为主题可以由一个词汇...

weixin_41168304的博客 20万+

mysql 的 3306、33060 端口区别,33060、33061、33062的区别,如何查看以及验证

端口 3306 是经典 MySQL 协议的默认端口 (port),由mysql客户端、MySQL 连接器和实用程序使用 比如Mysqldump和mysqlpump。从MySQL 8.0.14开始,服务器允许TCP / IP端口 专为管理连接配置。这提供单个管理连接的替代方法 在用于普通的网络接口上允许连接。服务器允许TCP / IP端口 专为管理连接配置。这提供单个管理连接的替代方法在用于普通的网络接口上允许连接。客户端 - 服务器连接端口。

全栈开发 1万+

CESM笔记——CESM1.0-CESM1.2.2-CESM2.1.3三个版本模式工作流对比

最近测试了CESM1.0,CESM1.2.2和CESM2.1.3三个版本,不同版本在workflow上有一些区别,来做点笔记。 CESM1.0 测试compset:B_2000,F_2000 workflow: 1. create_newcase -case ~/CESM/cesm1_0/script/B_2000 -compset B_2000 -res f19_g16 -mach tianhe 2. cd B_2000 (optional) env_mach_pes.xml ##修改核数,

砍柴姑娘Jourosy的博客 4943

基于 Simulink 的三相四线制整流器在三相不平衡负载下的中点电位平衡控制实战教程。

本文介绍了三相四线制整流器在不平衡负载下的中点电位平衡控制方法。首先分析了中点电位漂移的物理机理和控制策略(零序电压注入)。接着详细讲解了Simulink建模步骤:搭建三相四线制主电路、设计平衡控制算法、实现PWM调制。通过对比有无平衡控制的仿真结果,验证了控制方法的有效性。最后提供了工程建议:零序注入需限幅、考虑中性线寄生电感影响、采用稳健的PI参数。该方案能有效抑制中点电位波动,保障三电平系统在不平衡工况下的稳定运行。

MHD0815的博客 60

NoSQL简介

NoSQL是Not Only SQL的缩写,意即"不仅仅是SQL"的意思,泛指非关系型的数据库。强调Key-Value Stores和文档数据库的优点。NoSQL产品是传统关系型数据库的功能阉割版本,通过减少用不到或很少用的功能,来大幅度提高产品性能。

jay_musu的博客 7938

验证方法、符合性方法与设计保证的关系

未来,随着适航标准和工程实践的不断演进,验证与符合性方法将持续优化,以应对日益复杂的系统设计需求。设计保证过程中的验证活动具有双重作用,既用于设计过程的质量控制和风险管理,又作为适航符合性方法的重要支持材料。在未来的航空电子系统开发中,进一步优化设计保证与验证活动的协同作用,将有助于应对日益复杂的工程挑战,推动航空安全技术的发展。为了全面理解这二者之间的关系,本章将系统说明设计保证过程中的验证活动如何既服务于设计保证,又作为符合性方法中的核心证明材料。最终,通过功能测试和环境测试验证硬件的实际性能。

qq_41854911的博客 554

【MySQL】关于MySQLx协议和端口

一、关于MySQL X协议 MySQL X plugin是MySQL新发版本5.7.12中新增的插件,利用它实现MySQL作为文件存储数据库,也就是利用MySQL 5.7版本json支持的特性完成。 二、关于MySQLX plugin 的开启和关闭 MySQL启动之后监听了两个端口3306和33060,是为MySQL5.7.12 之后新增了X plugin。 这个插件默认是启用的,可以在配置配置文件/etc/my.cnf 添加mysqlx=0关闭X plug...

michaelwoshi的博客 1万+

PHM 2010数据集解读

PHM数据挑战赛是一项面向所有潜在与会者的竞赛。今年的挑战集中在使用测力仪、加速度计和声发射数据估计高速数控铣床刀具的RUL上。 博客对PHM 2010数据集的组成和信号进行了可视化。

cnjs1994的博客 7648

一个非常简单的变分量子分类器 (VQC)

​ 在之前的帖子(这里和这里)中,我已经开始谈论 QML,为什么以及如何学习,从现在开始,我将开始分享我的研究和发现,到目前为止,这些都是非常基本的。​

gongdiwudu的专栏 6208

NoSQL数据库简单介绍

一、NoSQL概述 NoSQL,泛指非关系型的数据库。传统的关系型数据库如MySQL、SQL Server、Oracle等都是将复杂的数据结构归结为简单的二元关系(即二维表形式),能够使用SQL语句进行复杂的查询并且支持事务。但是随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的社交网络类型的web2.0纯动态网站,面临着很多诸如在巨大数据量下查询缓慢,单一的关系型数据模型难以应对数据种类复杂等情况。这时就需要用到NoSQL的数据库了。 二、NoSQL

雪月清的博客 1万+

RV1126笔记二十七:MetaRTC6移植

MetaRTC6移植

6038

mysql nosql sqllite_技术分享 | MySQL 在 NoSQL 领域冲锋陷阵

作者:杨涛涛背景文章内容又是来源于客户的一个问题。问题描述:我们现在后台数据库全部为 MySQL,前端开发也非常熟悉 MySQL。但是现在有新的的业务进来。数据模型非常灵活,没有固定的表结构。起初我们考虑过 MySQL 的 memcached API。但是说实话非常鸡肋,没法全面的放开使用。这部分我们有考虑过 NoSQL 数据库,但是如果要部署 NoSQL 数据库,我们又得经过一系列的测试验证。请...

weixin_30224993的博客 166

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

mysql版本支持nosql技术_技术分享 | MySQL 在 NoSQL 领域冲锋陷阵

作者:杨涛涛背景文章内容又是来源于客户的一个问题。问题描述:我们现在后台数据库全部为 MySQL,前端开发也非常熟悉 MySQL。但是现在有新的的业务进来。数据模型非常灵活,没有固定的表结构。起初我们考虑过 MySQL 的 memcached API。但是说实话非常鸡肋,没法全面的放开使用。这部分我们有考虑过 NoSQL 数据库,但是如果要部署 NoSQL 数据库,我们又得经过一系列的测试验证。请...

weixin_39896256的博客 248

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

mysql 数组_技术分享 | MySQL 在 NoSQL 领域冲锋陷阵

背景文章内容又是来源于客户的一个问题。本文建议在PC端阅读问题描述:我们现在后台数据库全部为 MySQL,前端开发也非常熟悉 MySQL。但是现在有新的的业务进来。数据模型非常灵活,没有固定的表结构。起初我们考虑过 MySQL 的 memcached API。但是说实话非常鸡肋,没法全面的放开使用。这部分我们有考虑过 NoSQL 数据库,但是如果要部署 NoSQL 数据库,我们又得经过一...

weixin_39584571的博客 82

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

mysql 5.7 nosql_技术分享 | MySQL 在 NoSQL 领域冲锋陷阵

# mysql-shell# 把字段 x 值为 1 的记录更新为 MySQLMySQL ytt-pc:33050+ ssl ytt JS > db.f1.modify('x=1').set('x','mysql')Query OK, 1 item affected (0.0047 sec)Rows matched: 1 Changed: 1 Warnings: 0# 检索 x='m...

weixin_30654137的博客 158

mysql nosql 游戏开发_技术分享 | MySQL 在 NoSQL 领域冲锋陷阵

# mysql-shell# 把字段 x 值为 1 的记录更新为 MySQLMySQL ytt-pc:33050+ ssl ytt JS > db.f1.modify('x=1').set('x','mysql')Query OK, 1 item affected (0.0047 sec)Rows matched: 1 Changed: 1 Warnings: 0# 检索 x='mysql'...

weixin_34163313的博客 146

CnOpenData 线上招聘网站信息数据

CnOpenData线上招聘网站信息数据库是一个覆盖中国主流招聘平台、时间跨度长、更新频率高的劳动力市场需求侧大数据集合。本数据库汇集了,为学术界和业界提供了一扇实时观察中国劳动力市场动态的窗口。

CnOpenData_wj的博客 2619

nosql

NoSQL定义:非关系型、分布式、开放源码和具有横向扩展能力的下一代数据库。由c++编写的开源、高性能、无模式的基于分布式文件存储的文档型数据库特点:高性能、高可用性、高扩展性、丰富的查询支持、可替换已完场文档某个指定的数据字段应用场景:社交场景:使用mongodb存储用户信息游戏场景:用户信息,装备积分物流场景:订单信息,订单状态场景操作特点:数据量大;读写操作频繁;价值较低的数据,对事物性要求不高开源、c语言编写、默认端口号6379、key-value形式存在,存储非结构化数据。

weixin_63118253的博客 1690

常见的NoSQL数据库介绍

NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库。NoSQL 不依赖业务逻辑方式存储,而以简单的key-value模式存储(数据存储的类型不需要一个固定形式)。因此大大的增加了数据库的扩展能力。不遵循 SQL 标准不支持 ACID远超于 SQL 的性能。

一个老码农 3862

NoSQL【一】——基础知识介绍

介绍了NoSQL基础以及分布式系统的重要理论——CAP,BASE

qq_65754164的博客 3116

NoSql的四大类型

         NoSQL(Not Only Sql)泛指非关系型的数据库,区别于关系数据库, 它们不保证关系数据的ACID特性.NoSQL是一项全新的数据库革命性运动,其拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入.          NoSql有以下四大类型: 1.

Caster44的博客 2万+

什么是NoSQL?这里给你整明白

一、什么是 NoSQLNoSQL是一类非 SQL(关系)数据库,使用预定义表和列之外的其他数据模型。此类包含许多不同类型的数据库以及数据存储和操作的方法。二、什么是 SQLNoSQL与几十年来事实上的标准关系 (SQL) 数据库相对立。SQL 数据库将数据存储在由具有严格数据类型的列组成的预定义表中。表可以具有唯一性(表中行之间的关系)、检查约束(验证一行中的数据)或外键约束(不同表中数据之间的关系)。示例关系数据模型:SQL是一种标准查询语言,用于定义、操作和搜索关系数据库中的数据。基本 SQL 查询:

Free雅轩的博客 9612

NoSQL数据库入门

NoSQL 是一种不同于关系数据库的数据库管理系统设计方式,是对非关系型数据库的统称,它所采用的数据模型并非传统关系数据库的关系模型,而是类似键/值、列族、文档等非关系模型。NoSQL 数据库没有固定的表结构,通常也不存在连接操作,也没有严格遵守 ACID 约束。因此,与关系数据库相比,NoSQL 具有灵活的水平可扩展性,可以支持海量数据存储。此外,NoSQL数据库支持 MapReduce 风格的编程,可以较好地应用于大数据时代的各种数据管理。

琅琊之榜 3335

nosql sql mysql的区别_SQL 和 NoSQL 的区别

一、概念SQL(StructuredQueryLanguage)数据库,指关系型数据库。主要代表:SQLServer,Oracle,MySQL(开源),PostgreSQL(开源)。NoSQL(NotOnlySQL)泛指非关系型数据库。主要代表:MongoDB,Redis,CouchDB。二、区别1、存储方式SQL数据存在特定结构的表中;而NoSQL则更加灵活和可扩展,存储方式可以省...

weixin_36075657的博客 1090
上一篇: 技术分享 | Percona Toolkit 使用场景分享
下一篇: 微课程 | 第十五课《权限及黑白名单》
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值