MongoDB与MySQL:如何选择

MongoDB与MySQL:如何选择,第1张

MongoDB和MySQL分别是领先的开源NoSQL和关系数据库。哪个最适合您的应用程序?

在1990年代的互联网泡沫时期,用于Web应用程序的一种通用软件堆栈是LAMP,它最初代表Linux(OS),Apache(Web服务器),MySQL(关系数据库)和PHP(服务器编程语言)。MySQL是首选的数据库,主要是因为它是免费的开源代码,并且具有良好的读取性能,非常适合从数据库动态生成网站的“ Web 2.0”应用程序。

之后,代表MongoDB(文档数据库),Express(Web服务器),AngularJS(前端框架)和Node.js(后端JavaScript运行时)的MEAN堆栈开始流行。除其他原因外,MEAN堆栈很有吸引力,因为您需要了解的唯一语言是JavaScript。与等效的LAMP堆栈相比,它还需要更少的RAM。

MySQL AB的Monty Widenius和David Axmark最初于1994年开始开发MySQL。产品名称中的“ My”是指Widenius的女儿,而不是英语单词“ my”。MySQL旨在与mSQL(又名Mini)兼容。 SQL),并添加了SQL查询层和开放源代码许可(实际上是专有和GPL双重许可)。MySQL的公共发行版于1996年底开始,并且每年或每两年持续发行一次。MySQL是当前最受欢迎的关系数据库。

Sun Microsystems于2008年以10亿美元的价格收购了MySQL AB,Oracle于2010年收购了Sun。在Oracle收购MySQL的广泛关注中,Widenius在收购Oracle之前就将MySQL 5.5合并到了MariaDB中。MariaDB努力维护与Oracle MySQL版本的兼容性。

与功能更强大的商业关系数据库(例如Oracle数据库,IBM DB / 2和Microsoft SQL Server)相比,MySQL最初是一个相当低端的关系数据库,尽管它足以成为动态网站的后备存储。多年来,它增加了您希望从关系数据库获得的大多数功能,包括事务,参照完整性约束,存储过程,游标,全文索引和搜索,地理索引和搜索以及群集。

尽管MySQL现在支持“大数据库”功能,例如主从部署,与Memcached一起使用以及水平分片,但它仍通常用于中小型部署。将MySQL扩展到多个从属服务器可以提高读取性能,但是只有主服务器才能接受写请求。

AWS提供了两种形式的MySQL即服务,即Amazon RDS和Amazon Aurora。后者具有更高的性能,可以处理TB级的数据,更新副本的延迟时间更短,并且可以直接与Oracle数据库和SQL Server竞争。

MongoDB是高度可伸缩的 *** 作文档数据库,可在开源版本和商业企业版本中使用,它可以在本地运行或作为托管云服务运行。托管云服务称为MongoDB Atlas。

MongoDB无疑是NoSQL数据库中最受欢迎的数据库。它的文档数据模型为开发人员提供了极大的灵活性,而其分布式体系结构则提供了很好的可伸缩性。因此,通常选择MongoDB用于必须管理大量数据,得益于水平可伸缩性并处理不适合关系模型的数据结构的应用程序。

MongoDB是一个基于文档的存储,在其之上还具有一个基于图形的存储。MongoDB实际上并不存储JSON:它存储BSON(二进制JSON),该扩展了JSON表示(字符串)以包括其他类型,例如int,long,date,浮点,decimal128和地理空间坐标。

MongoDB可以使用数据的类型生成正确的索引类型,从而在数据的单个副本上生成多模式图形,地理空间,B树和全文本索引。MongoDB使您可以在任何文档字段上创建索引。MongoDB 4具有多文档事务,这意味着即使必须标准化数据设计,您仍然可以获得ACID属性。

默认情况下,MongoDB使用动态模式,有时称为无模式。单个集合中的文档不需要具有相同的字段集,并且字段的数据类型可以在集合中的不同文档之间有所不同。您可以随时使用动态模式更改文档结构。

但是,可以使用架构治理。从MongoDB 3.6开始,MongoDB支持JSON模式验证,您可以在验证器表达式中将其打开。

在LAMP和MEAN堆栈上存在很多变化。例如,您可以在Windows(WAMP)或MacOS(MAMP)上运行而不是Linux OS。您可以运行IIS(WIMP),而不是Windows上的Apache Web服务器。

您可以运行PostgreSQL或SQL Server,而不是LAMP堆栈中的MySQL关系数据库。如果您需要全球分布,则可以运行CockroachDB或Google Cloud Spanner。可以使用Perl或Python代替PHP语言。如果要使用Java或C#进行编码,则需要考虑单独的堆栈系列。

您可以运行Couchbase或Azure Cosmos DB以获得更好的全局分布,而不是MEAN堆栈中的MongoDB文档数据库。可以使用十二个Node.js Web服务器框架中的任何一个来代替Express 。除了AngularJS前端框架,您还可以运行Angular 2或React。

选择数据库时要问的最重要的问题是:

这些问题中的几个会趋于缩小数据库的选择范围,但是与制定LAMP堆栈时相比,我们有更多选择。如果您要构建一个应用程序,并且该应用程序必须在99.999%的时间内对全世界的用户都具有高度的一致性,那么只有少数几个数据库适合您。如果您的应用程序将在工作日的上午9点至下午6点在一个国家/地区使用,并且可以容忍最终的一致性,那么几乎所有数据库都可以使用,尽管某些数据库对于开发人员和 *** 作员而言更容易,而某些数据库则可以为您的主要使用场景提供更好的性能。

虽然LAMP和MEAN堆栈一次是Web应用程序的良好解决方案,但现在都不是最佳选择。而不是盲目采用任何一种,您应该仔细考虑用例,并找到一种可在可预见的将来为您的应用程序服务的体系结构。

您什么时候需要关系数据库(例如MySQL)用于新应用程序?除了对标准SQL的明显支持外,关系数据库本身将数据强制为具有一致的强类型字段的表格模式,并且只要您利用规范化就可以帮助您避免数据重复。

另一方面,如果您还需要偶尔的自由格式文档,则MySQL和许多其他关系数据库也支持RFC 7159定义的JSON数据。如果您还想使用XML文档和XPath或XSLT,则大多数关系数据库都可以提供这种能力。

您何时需要像MongoDB这样的文档数据库?如果您的主要用例需要允许使用自由格式的数据,在文档之间更改类型的字段,随时间变化的架构或嵌套的文档,则NoSQL数据库将满足要求。另外,如果您的应用程序是用JavaScript编写的,那么文档数据库的JSON格式将很自然。

作者: Martin Heller是InfoWorld的特约编辑和审稿人。他曾担任Web和Windows编程顾问,从1986年至2010年开发数据库,​​软件和网站。最近,他担任Alpha Software技术和教育副总裁以及Tubifi董事长兼首席执行官。

Usage: mysql [OPTIONS] [database] //命令方式

-?, --help //显示帮助信息并退出

-I, --help //显示帮助信息并退出

--auto-rehash //自动补全功能,就像linux里面,按Tab键出提示差不多,下面有例子

-A, --no-auto-rehash //默认状态是没有自动补全功能的。-A就是不要自动补全功能

-B, --batch //ysql不使用历史文件,禁用交互

(Enables --silent)

--character-sets-dir=name //字体集的安装目录

--default-character-set=name//设置数据库的默认字符集

-C, --compress //在客户端和服务器端传递信息时使用压缩

-#, --debug[=#] //bug调用功能

-D, --database=name //使用哪个数据库

--delimiter=name//mysql默认命令结束符是分号,下面有例子

-e, --execute=name //执行mysql的sql语句

-E, --vertical //垂直打印查询输出

-f, --force //如果有错误跳过去,继续执行下面的

-G, --named-commands

/*Enable named commands. Named commands mean this program's

internal commandssee mysql>help . When enabled, the

named commands can be used from any line of the query,

otherwise only from the first line, before an enter.

Disable with --disable-named-commands. This option is

disabled by default.*/

-g, --no-named-commands

/*Named commands are disabled. Use \* form only, or use

named commands only in the beginning of a line ending

with a semicolon () Since version 10.9 the client now

starts with this option ENABLED by default! Disable with

'-G'. Long format commands still work from the first

line. WARNING: option deprecateduse

--disable-named-commands instead.*/

-i, --ignore-spaces //忽视函数名后面的空格.

--local-infile //启动/禁用 LOAD DATA LOCAL INFILE.

-b, --no-beep //sql错误时,禁止嘟的一声

-h, --host=name //设置连接的服务器名或者Ip

-H, --html //以html的方式输出

-X, --xml //以xml的方式输出

--line-numbers //显示错误的行号

-L, --skip-line-numbers //忽略错误的行号

-n, --unbuffered//每执行一次sql后,刷新缓存

--column-names //查寻时显示列信息,默认是加上的

-N, --skip-column-names //不显示列信息

-O, --set-variable=name //设置变量用法是--set-variable=var_name=var_value

--sigint-ignore //忽视SIGINT符号(登录退出时Control-C的结果)

-o, --one-database //忽视除了为命令行中命名的默认数据库的语句。可以帮跳过日志中的其它数据库的更新。

--pager[=name] //使用分页器来显示查询输出,这个要在linux可以用more,less等。

--no-pager //不使用分页器来显示查询输出。

-p, --password[=name] //输入密码

-P, --port=#//设置端口

--prompt=name //设置mysql提示符

--protocol=name //使用什么协议

-q, --quick //不缓存查询的结果,顺序打印每一行。如果输出被挂起,服务器会慢下来,mysql不使用历史文件。

-r, --raw //写列的值而不转义转换。通常结合--batch选项使用。

--reconnect //如果与服务器之间的连接断开,自动尝试重新连接。禁止重新连接,使用--disable-reconnect。

-s, --silent//一行一行输出,中间有tab分隔

-S, --socket=name //连接服务器的sockey文件

--ssl //激活ssl连接,不激活--skip-ssl

--ssl-ca=name //CA证书

--ssl-capath=name //CA路径

--ssl-cert=name //X509 证书

--ssl-cipher=name //SSL cipher to use (implies --ssl).

--ssl-key=name //X509 密钥名

--ssl-verify-server-cert //连接时审核服务器的证书

-t, --table //以表格的形势输出

--tee=name //将输出拷贝添加到给定的文件中,禁时用--disable-tee

--no-tee//根--disable-tee功能一样

-u, --user=name //用户名

-U, --safe-updates //Only allow UPDATE and DELETE that uses keys.

-U, --i-am-a-dummy //Synonym for option --safe-updates, -U.

-v, --verbose //输出mysql执行的语句

-V, --version //版本信息

-w, --wait //服务器down后,等待到重起的时间

--connect_timeout=# //连接前要等待的时间

--max_allowed_packet=# //服务器接收/发送包的最大长度

--net_buffer_length=# //TCP / IP和套接字通信缓冲区大小。

--select_limit=#//使用--safe-updates时SELECT语句的自动限制

--max_join_size=# //使用--safe-updates时联接中的行的自动限制

--secure-auth //拒绝用(pre-4.1.1)的方式连接到数据库

--server-arg=name //Send embedded server this as a parameter.

--show-warnings //显示警告

Pandas是Python下一个开源数据分析的库,它提供的数据结构DataFrame极大的简化了数据分析过程中一些繁琐 *** 作。

1. 基本使用:创建DataFrame. DataFrame是一张二维的表,大家可以把它想象成一张Excel表单或者Sql表。Excel 2007及其以后的版本的最大行数是1048576,最大列数是16384,超过这个规模的数据Excel就会d出个框框“此文本包含多行文本,无法放置在一个工作表中”。Pandas处理上千万的数据是易如反掌的sh事情,同时随后我们也将看到它比SQL有更强的表达能力,可以做很多复杂的 *** 作,要写的code也更少。

说了一大堆它的好处,要实际感触还得动手码代码。首要的任务就是创建一个DataFrame,它有几种创建方式:

(1)列表,序列(pandas.Series), numpy.ndarray的字典

二维numpy.ndarray

别的DataFrame

结构化的记录(structured arrays)

(2)其中,二维ndarray创建DataFrame,代码敲得最少:

import pandas as pd

import numpy as np

df = pd.DataFrame(np.random.randn(10, 4))

df

0 1 2 3

0 0.927474 0.127571 1.655908 0.570818

1 -0.425084 -0.382933 0.468073 -0.862898

2 -1.602712 -0.225793 -0.688641 1.167477

3 -1.771992 -0.692575 -0.693494 -1.063697

4 -0.456724 0.371165 1.883742 -0.344189

5 1.024734 0.647224 1.134449 0.266797

6 1.247507 0.114464 2.271932 -0.682767

7 -0.190627 -0.096997 -0.204778 -0.440155

8 -0.471289 -1.025644 -0.741181 -1.707240

9 -0.172242 0.702187 -1.138795 -0.112005

(3)通过describe方法,可以对df中的数据有个大概的了解:

df.describe()

0 1 2 3

count 10.000000 10.000000 10.000000 10.000000

mean -0.189096 -0.046133 0.394722 -0.320786

std 1.027134 0.557420 1.258019 0.837497

min -1.771992 -1.025644 -1.138795 -1.707240

25% -0.467648 -0.343648 -0.692281 -0.817865

50% -0.307856 0.008734 0.131648 -0.392172

75% 0.652545 0.310266 1.525543 0.172096

max 1.247507 0.702187 2.271932 1.167477

2. 改变cell。

3. group by。

4. 读写文件。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7424713.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-05
下一篇 2023-04-05

发表评论

登录后才能评论

评论列表(0条)

保存