MongoDB和MySQL分别是领先的开源NoSQL和关系数据库。哪个最适合您的应用程序?
在1990年代的互联网泡沫时期,用于Web应用程序的一种通用软件堆栈是LAMP,它最初代表Linux(OS),Apache(Web服务器),MySQL(关系数据库)和PHP(服务器编程语言)。MySQL是首选的数据库,主要是因为它是免费的开源代码,并且具有良好的读取性能,非常适合从数据库动态生成网站的“ Web 20”应用程序。
之后,代表MongoDB(文档数据库),Express(Web服务器),AngularJS(前端框架)和Nodejs(后端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 55合并到了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 36开始,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文档数据库。可以使用十二个Nodejs Web服务器框架中的任何一个来代替Express 。除了AngularJS前端框架,您还可以运行Angular 2或React。
选择数据库时要问的最重要的问题是:
这些问题中的几个会趋于缩小数据库的选择范围,但是与制定LAMP堆栈时相比,我们有更多选择。如果您要构建一个应用程序,并且该应用程序必须在99999%的时间内对全世界的用户都具有高度的一致性,那么只有少数几个数据库适合您。如果您的应用程序将在工作日的上午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董事长兼首席执行官。
update
aaa
set
bbb=
select
substr(bbb,1,9)||'1'||substr(bbb,11,6)
where
bbb
like
'%一%'
;
如果你的bbb字段里还有很多带“一”的话,修改where的条件。
一、举个例子
表名为zwj,字段为sp,查询sp字段中含有'所有'的语句为select from zwj where sp like '%所有%' --表名为zwj,字段为sp,查询sp字段中含有'所'或'有'的语句为select from zwj where sp like '%所%' or sp like '%有%'
二、含有医院编号字段的所有表
select a[name] 表名 from sysobjects a,
( select [id],count() b from syscolumns
where [name] ='HospitalId'
group by [id])
b where a[id]=b[id]
三、同时含有医院编号和科室编号字段的所有表
select a[name] 表名 from sysobjects a
left join
(select [id],count() b from syscolumns where [name]
in('HospitalId','DepartmentId') group by [id] having count()>1) b
on a[id]=b[id]
where bid is not null
sqlserver数据库主要特性:
(1)高性能设计,可充分利用WindowsNT的优势。
(2)系统管理先进,支持Windows图形化管理工具,支持本地和远程的系统管理和配置。
(3)强壮的事务处理功能,采用各种方法保证数据的完整性。
(4)支持对称多处理器结构、存储过程、ODBC,并具有自主的SQL语言。 SQLServer以其内置的数据复制功能、强大的管理工具、与Internet的紧密集成和开放的系统结构为广大的用户、开发人员和系统集成商提供了一个出众的数据库平台。
SQL参数设置失败可能有多种原因,以下是一些可能导致该问题的原因及相应的解决方法:
1 参数名称错误:如果在查询中使用了不存在的参数名称,则会导致参数设置失败。请检查参数名称是否正确。
2 参数类型错误:如果参数的数据类型与查询中的数据类型不匹配,则会导致参数设置失败。请确保在设置参数时使用正确的数据类型。
3 参数值错误:如果参数的值无法转换为所需的数据类型,则会导致参数设置失败。请确保在设置参数时使用了正确的参数值。
4 SQL语法错误:如果SQL语句中存在语法错误,则可能导致参数设置失败。请检查SQL语句是否正确。
5 数据库连接问题:如果数据库连接异常,则可能导致SQL参数设置失败。请确保数据库连接正常,并且用户权限足够执行查询。
6 防注入机制:一些安全意识较高的数据库或应用程序会加入防注入机制,导致无法顺利设置参数,请检查是否存在相应的防注入机制,并且在设置参数时进行相应的处理。
这些解决方法应该可以帮助您解决SQL参数设置失败的问题。
数据表命名规则中只能使用以下字符:
1 字母(A~Z、a~z)
2 数字(0~9)
3 下划线(_)
在命名数据表时,应该遵循以下规则:
1 数据表名应该能够准确描述其中存储的数据类型,名称应该尽可能简洁、准确。
2 数据表名应该以字母或下划线开头,不推荐使用数字开头。
3 数据表名不应该超过64个字符,以避免在某些数据库中出现问题。
4 数据表名中应该避免使用空格和特殊字符,以免出现不可预测错误。
5 数据表名应该遵循一定的命名规范,例如采用下划线分隔单词或使用驼峰命名法等。
如果您在命名数据表时遵循了以上规则,但仍然无法正常工作,可以检查数据库的设置和权限是否存在问题,或者尝试重新命名数据表。这些方法可能有助于解决数据表命名问题。
以上就是关于MongoDB与MySQL:如何选择全部的内容,包括:MongoDB与MySQL:如何选择、如何替换数据库表中的某些数据、sqlserver数据库中怎样查询某个字段中含有某些字等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)