SQL-九个理由分析-的灭亡倒计时 (sql九个关键字)
考虑到 SQL 的流行和成功,本文更像是一个悖论研究。SQL 可能笨拙而冗长,但开发人员经常发现它是提取所需数据的最简单、最直接的方法。当查询写入正确时,它可以像闪电一样快,而当查询出错时,它又会慢得惊人。它已经存在了几十年,但新功能一直在不断增加。
这些矛盾并不重要,因为市场已经表明:SQL 是许多人的首选,即使有更新的、更强大的选项。从最小的网站到最大的大型公司,各地的开发人员都知道 SQL。他们依靠它来组织所有的数据。SQL 的表格模型如此流行,以至于许多非 SQL 项目最终都添加了 SQLish 接口,因为用户需要它。甚至是NoSQL 运动——其发明是为了摆脱旧的范式——最终似乎也败给了 SQL。
SQL 的局限性可能不足以将其彻底抛弃。开发人员也可能永远不会着手将所有数据从 SQL 中迁移出去。但是 SQL 的问题是真实存在的,足以给开发人员带来压力,增加延迟,甚至需要对某些项目进行重新设计。下面是我们希望放弃 SQL 的 9 个原因,尽管我们知道这可能做不到。
1. 表格不能扩展
关系模型钟情于表格,所以我们一直在构建它。这对于小型甚至正常大小的数据库来说还好,但面对真正的大规模数据库,这个模型就会崩溃。有些人试图通过将新旧结合起来来解决问题,比如将分片集成到旧的开源数据库中。添加层似乎可以使数据更易于管理,并提供无限的规模。但这些增加的层可能隐藏危险。根据分片中存储的数据量,SELECT 或 JOIN 的处理时间可能会有很大的不同。
分片还迫使数据库管理员 (DBA) 考虑数据可能存储在不同的机器上,甚至可能存储在不同的地理位置上的可能性。没有经验的管理员在开始跨表搜索时,如果没有意识到数据存储在不同的位置,可能会感到困惑。该模型有时会将位置从视图中抽象出来。一些 AWS 机器配备了 24TB 的 RAM,因为一些数据库用户需要这么多。他们在 SQL 数据库中有这么多数据,而且这样能够运行得更好。
2. SQL 不是 JSON 或 XML 原生的
SQL 可能是一种常青树式的语言,但它并不特别适合 JSON、YAML 和 XML 等较新的数据交换格式。所有这些都支持比 SQL 更分层、更灵活的格式。SQL 数据库的核心仍然停留在关系模型中,充斥着各种表格。市场会想方设法掩盖这种常见的抱怨。使用正确的粘合代码添加不同的数据格式(如 JSON)相对容易,但您将付出损失时间的代价。
一些 SQL 数据库现在能够编码和解码更现代的数据格式(如 JSON、XML、GraphQL 或 YAML)作为原生特性。但是在内部,数据通常使用相同的旧表格模型进行存储和索引。在这些格式之间转换数据要花费多少时间?用一种更现代的方式存储数据不是更容易吗?一些聪明的数据库开发人员仍在继续进行实验,但奇怪的是,他们经常会使用某种 SQL 解析器。封送(Marshaling)是一项耗费大量时间的工作。
3. 数据库可以在表中存储数据,但是需要程序员编写处理对象的代码
设计数据驱动的应用程序的大部分工作,似乎都是找出从数据库中提取的数据并将其转换为业务逻辑可以处理的对象的最佳方法。必须通过将对象中的数据字段转换为 SQL upsert 来解组数据。难道没有一种方法可以让数据保持一种随时可用的格式吗?
4. SQL 并非实时的
最初的 SQL 数据库是为批处理分析和交互模式而设计的。具有长处理管道的流数据模型是一个相对较新的想法,而且它并不完全匹配。主要的 SQL 数据库是在几十年前设计的,当时的模型设想数据库可以独立运行,像某种 Oracle 一样回答查询。有时它们反应迅速,有时则不然。这就是批处理的工作方式。
一些最新的应用程序要求更好的实时性能——不仅仅是为了方便,而且因为应用程序需要它。在现代的流媒体世界里,缺乏实时功能是行不通的。为这些市场设计的最新数据库非常重视速度和响应能力。它们不提供那种复杂的 SQL 查询,以免造成延迟。
5. JOIN 是一个令人头疼的问题
关系数据库的 JOIN 操作是出了名的难以使用和理解。它们经常导致难以调试的性能问题,因为优化器可能无法选择最佳的执行计划。JOIN 可能会导致数据重复,这可能会浪费存储空间并增加查询时间。
6. SQL 缺乏表达性
SQL 是一种声明式语言,这意味着它指定要执行的操作,但不指定如何执行这些操作。这可能会导致性能问题,因为优化器必须自行确定执行查询的最佳方式。SQL 缺乏一些高级功能,例如递归查询和窗口函数。这些功能可以使查询更简洁、更高效。
7. SQL 很难维护
随着时间的推移,SQL 数据库可能会变得非常复杂,难以维护。这可能是由于以下几个因素造成的: 添加了新表和字段; 更改了现有的表和字段; 增加了索引和约束; 性能问题; 以及数据的增长。这可能使 DBA 难以管理数据库并确保其正常运行。
8. SQL 难以扩展
随着数据量的增加,SQL 数据库可能会变得难以扩展。这可能是由于以下几个因素造成的: 存储空间不足; 处理器不足; 内存不足; 以及 I/O 瓶颈。这可能使 DBA 难以扩展数据库以满足不断增长的需求。
9. SQL 缺乏可移植性
SQL 是一种非标准语言,不同的数据库供应商对其有不同的实现。这可能会使 DBA 难以将数据库从一个供应商迁移到另一个供应商。SQL 缺乏跨不同平台的可移植性,这意味着 DBA 难以将数据库从一个平台迁移到另一个平台。
结论
尽管存在这些问题,SQL 仍然在许多组织中广泛使用。这是因为 SQL 是一种功能强大、灵活且相对易于使用的语言。SQL 具有悠久的历史,并且得到了广泛的工具和支持的生态系统。尽管如此,随着 NoSQL 数据库和新兴数据库技术的发展,SQL 的未来尚不确定。这些新技术的一些功能,例如可扩展性、实时功能和表达性,可能最终会使 SQL 过时。
选择PosgreSQL的十个理由,和几个MySQL胜出的特性
一、 PostgreSQL 的稳定性极强,的确,MySQL 有多种引擎,也确实 Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,但是,很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的??PG数据库15分钟被闪断四次的前D 一、 PostgreSQL 的稳定性极强,的确,MySQL 有多种引擎,也确实 Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,但是,很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的??PG数据库15分钟被闪断四次的前DBA毫无压力的含笑而过。 二、任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍可以维持双曲线甚至对数曲线,而 MySQL 明显出现一个波峰后下滑。 这些曲线在第三方的测试数据中频繁出现,有兴趣的朋友可以 Google 或自己构建一个测试。 三、在欧美 PG 远没有在中国这么非主流,很多优秀的团队都在用, 主流的开发语言几乎都有 PG 的成熟开发接口,这一点不必有顾虑。 像 Python 的 dbapi ,还支持 PG 的异步读写,著名的 SQLAlchemy 对PG的一些特有功能也有支持。 四、PG 多年来在 GIS 领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型,通过 SQLAlchemy 这样的工具,可以大大简化开发人员的工作。 五、PG 的“无锁定”特性非常突出,很多 MySQL 需要锁表(也许是在你没有发现的情况下)的操作,PG都可以平滑处理,甚至包括 vacuum 这样的整理数据空间的操作。 这就是PG高并发下优异性能的奥秘。 六、PG 的可以使用函数和条件索引,这使得PG数据库的调优非常灵活,而这些功能是经过几十年发展和应用考验的,绝非某个一度反复宣称自己不支持的技术全都是“复杂而无用的”,直到自己支持这些技术为止的数据库产品可以相比的。 七、PG 对于数据分析师有难以抗拒的魅力,它有极其强悍的 SQL 编程能力(9.x 图灵完备,支持递归!),有非常丰富的统计函数和统计语法支持,例如这里的 window 语法。 PG 还可以方便的使用 Python、Perl 甚至任何你喜欢的编程语言写函数。 八、PG 的有多种集群架构可以选择,plproxy 可以支持语句级的镜像或分片,slony 可以进行字段级的同步设置,standby 可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便,操作非常简单。 有年在腾讯广州举办的 barcamp ,我现场展示,一次成功。 九、一般关系型数据库的字符串有限定长度8k左右,无限长 TEXT 类型的功能受限,只能作为外部大数据访问。 而 PG 的 TEXT 类型可以直接访问,SQL语法内置正则表达式,可以索引,还可以全文检索,或使用xml xpath。 用PG的话,文档数据库都可以省了。 十、PG是BSD类的授权协议,如果你真的对它有足够的兴趣和动力,可以尽情的阅读代码,修改定制。 这是出自伯克利校园,历经数十年锤炼的优秀代码,是巨大的宝藏。 ==================================================================最后说一下我感觉 PG 不如 MySQL 的地方。 第一,MySQL有一些实用的运维支持,如 ,这个pg肯定可以定制出来,但是如果可以配置使用就更好了。 第二是mysql的innodb引擎,可以充分优化利用系统所有内存,超大内存下PG对内存使用的不那么充分,第三是mysql有内存表,这是个被低估的功能。 第四点,MySQL现在允许跳过SQL,在socket上直接调用API,这是个勇敢的尝试,虽然整个社区用的还不多,但是遇到极端场景,需要榨干性能的团队,值得尝试。
买房前必须理性分析九个方面
买房前必须进行理性分析,具体体现在九个方面。
参考一:买房动因
所谓买房动因,就是我们在买房前须清楚自己为什么而买房,并且要清楚支撑我们买房的理由是否充分。每个人买房的动因都不尽相同:有的人是为了自住、有的人是为了投资、有的人是为了改善自己及家人的生活;有的人买房是为了自己的面子、有的人买房是为了结婚、有的人买房是为了子女入学;有的人买房是为了保值、有的人买房是因为有了偶然所得却不知如何合理支配、有的人是被迫变相买房等。
建议:不太赞同因结婚、面子等而借贷买房,因为这些想法于己、于家都是极不利的。
参考二:人生定位
每个人都有自己的生活方式和人生观,也有对自己人生进行定位的权利。不同的生活方式,不同的人生观,不同的定位将令一个人的处事方法和行为产生不同。在买房与否的问题上,每个人的想法也不尽相同:有的人认为买一套房子是自己一生的奋斗目标、有的人认为赚了点钱首先应改善生活、有的人认为事业过得去即可关键是要生活得好,这样的人最易加入买房大军;有的人认为应以事业和发展为重、有的人认为应将资金进行合理规划、有的人认为房屋的功能仅为居住,这样的人大多选择租房。
建议:年轻人当以事业为重,不要过早投入买房行列。
参考三:个人状况
我们在进行每一项消费时都要依自己的状况而定,包括自己的工作状况、健康状况、情感状况等,因为不同的状况将对自己的消费所带来的后果产生不同的影响。而对于个人来说,买房只是其众多消费行为中的一种。故在买房之前,我们需衡量一下自己的个人状况。
建议:在个人工作不稳定、健康状况不好、情感出现危机这项中,如果占一项以上,就不太适合买房。
参考四:家庭状况
有家庭的人在进行消费时都会依据家庭状况而作出相应决定,同样地,我们在买房时也需衡量自己家庭的状况,包括家庭收支状况、家庭成员健康状况、家庭成员情感状况、家庭成员事业状况等。
建议:惟有对家庭状况作出理性分析,才能正确得出买房与否的结论。
参考五:经济能力
我们每个人在决定自己的消费或投资行为时都要衡量自己(或家庭)的经济能力。比如说,我们大多数人不会考虑开奔驰车、穿阿玛尼、戴江诗丹顿,而是会根据自己的经济条件进行合理的消费规划。同样,我们在选择房屋消费时也要根据自己的经济条件进行合理规划,切忌盲目攀比。
建议:前期,有很多人根本不具备买房能力,可在盲目的心态驱使下投入购房行列,这种行为与普通人买奢侈产品无异。
![的灭亡倒计时](https://tyye.cn/zb_users/theme/tpure/style/images/lazyload.png)
参考六:经济形势
我们每个人都生活在社会大家庭中,国际、国内经济形势对于我们的消费特别是大宗消费的影响是很大的。比如在目前国际经济危机的大环境下,我们的收入预期都不得不调低,这样,我们在进行大宗消费时就必须要冷静、谨慎。
建议:在国家对房地产市场进行宏观调控的大背景下,购房慎重,不宜急于出手。
参考七:国家政策
由于目前商品房不能满足民众普遍的住房需求,政府会在不同时期都对商品房市场进行调控和理性引导。中国房地产市场并非完全处于市场经济时期,因此,我们不可忽视国家政策对房地产市场的影响。建议:在目前政府大力兴建保障房、鼓励开发商兴建中低价商品房并降价销售、限购的政策环境下,市场供大于求的局面必将长期存在。这样,我们在决定买房之前,就从容许多。
参考八:市场状况
任何一种商品,在卖方市场环境下都比较受热捧,而在买方市场环境下则相反。在房地产火爆时期,商品房的价格就是在热捧之下被盲目推高的。
建议:消费者在目前的市场态势下,应以观望心态去选择房源。
参考九:买房时机
在决定买房前,必须分析一下市场状况,看买房时机是否合适。对于自住需求者在房价处上升通道或平稳发展时都可以考虑买房,而在房价处下跌态势下切忌买房。现在有一些人鼓吹只要是自住需求,买房就不必犹豫,此说法显然是在为既得利益集团摇旗呐喊。因为,我们每个人赚钱都不是很容易的,在房价处下降通道时买房无异拱手送钱于人。至于说投资,那就更要谨慎了。
(以上回答发布于2017-03-03,当前相关购房政策请以实际为准)
搜狐焦点为您提供全面的新房、二手房、租房、家装信息
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。