数据库选型是一件很大的事情,也是一件很头疼的事情。
很多企业并没有数据库的选型标准,或者并不了解业务需要什么样的数据库。
很多企业的数据库是开发说了算,熟悉什么就用什么,很多选型失误,导致后期非常尴尬的局面。
那么数据库选型要注意什么呢?
列举一些例子,取自如下文档
1. 递归查询, connect by, 树形查询
PostgreSQL 通过(with 或 tablefunc支持)支持例子
https://yq.aliyun.com/articles/240
http://www.postgresql.org/docs/9.5/static/tablefunc.html
2. 窗口查询, window over
PostgreSQL 支持例子
http://blog.163.com/digoal@126/blog/static/16387704020137154137930
http://blog.163.com/digoal@126/blog/static/16387704020121024102312302/
http://blog.163.com/digoal@126/blog/static/16387704020124239390354/
http://www.postgresql.org/docs/9.5/static/functions-window.html
3. rollup, grouping sets, cube
PostgreSQL 支持例子
http://www.postgresql.org/docs/9.5/static/queries-table-expressions.html#QUERIES-GROUPING-SETS
http://blog.163.com/digoal@126/blog/static/16387704020154269591874/
4. 高级聚合(json,数组,相关性,标准差(采样,全局),截距,斜率,方差(采样,全局),mode,percentile_cont,distc,rank,dense_rank,percent_rank,cume_dist,grouping)
PostgreSQL 支持例子
http://www.postgresql.org/docs/9.5/static/functions-aggregate.html
http://blog.163.com/digoal@126/blog/static/1638770402015224124337/
http://blog.163.com/digoal@126/blog/static/1638770402015379286873/
http://blog.163.com/digoal@126/blog/static/16387704020153713222764
4. hash join, merge join, nestloop join
PostgreSQL 支持例子
http://www.postgresql.org/docs/9.5/static/xoper-optimization.html
http://www.postgresql.org/docs/9.5/static/planner-optimizer.html
5. 哈希聚合
PostgreSQL 支持例子
http://www.postgresql.org/docs/9.5/static/runtime-config-query.html#RUNTIME-CONFIG-QUERY-ENABLE
6. 事务间共享事务快照
PostgreSQL 支持例子
http://www.postgresql.org/docs/9.5/static/functions-admin.html#FUNCTIONS-SNAPSHOT-SYNCHRONIZATION
http://www.postgresql.org/docs/9.5/static/sql-set-transaction.html
http://www.postgresql.org/docs/9.5/static/app-pgdump.html
http://blog.163.com/digoal@126/blog/static/163877040201326829943/
http://blog.163.com/digoal@126/blog/static/163877040201241134721101/
7. 展开式索引(支持多列任意组合查询)
PostgreSQL 支持例子
《宝剑赠英雄 - 任意组合字段等效查询, 探探PostgreSQL多列展开式B树》
1. foreign key
PostgreSQL 支持例子
http://www.postgresql.org/docs/9.5/static/ddl-constraints.html
2. for no key update, for key share 粒度锁
PostgreSQL 支持例子
http://www.postgresql.org/docs/9.5/static/explicit-locking.html#LOCKING-ROWS
http://blog.163.com/digoal@126/blog/static/16387704020130249109133/
http://blog.163.com/digoal@126/blog/static/16387704020130305109687/
3. check 约束
PostgreSQL 支持例子
http://www.postgresql.org/docs/9.5/static/ddl-constraints.html
4. exclusion 约束
PostgreSQL 支持例子
http://www.postgresql.org/docs/9.5/static/ddl-constraints.html
1. 表空间
2. alter 列值转表达式
(alter table alter column c1 type newtype using (expression(...)) )
PostgreSQL 支持例子
http://www.postgresql.org/docs/9.5/static/sql-altertable.html
https://yq.aliyun.com/articles/30470
3. alter table 需要重组表的操作
PostgreSQL少量操作需要重组
vacuum full, cluster, 修改字段数据类型, (修改长度不需要重组表)
http://www.postgresql.org/docs/9.5/static/sql-altertable.html
4. 分区表
《PostgreSQL 9.5+ 高效分区表实现 - pg_pathman》
5. 物化视图
PostgreSQL 支持例子
http://www.postgresql.org/docs/9.5/static/sql-creatematerializedview.html
6. 物化视图增量刷新
PostgreSQL 支持例子
http://www.postgresql.org/docs/9.5/static/sql-refreshmaterializedview.html
7. 表继承关系
PostgreSQL 支持例子
http://www.postgresql.org/docs/9.5/static/tutorial-inheritance.html
8. 使用 like 建结构类似的表
PostgreSQL 支持例子
http://www.postgresql.org/docs/9.5/static/sql-createtable.html
1. 客户端开发语言支持
C, java, python, ...
2. 函数
返回 void, 单行,SRF,事件触发器(MySQL 不支持),触发器
例子
http://blog.163.com/digoal@126/blog/static/16387704020132131361949/
http://www.postgresql.org/docs/9.5/static/event-triggers.html
3. 2PC
4. 服务端绑定变量
PostgreSQL 支持例子
http://www.postgresql.org/docs/9.5/static/sql-prepare.html
5. savepoint
6. 异步消息
PostgreSQL 支持例子
http://www.postgresql.org/docs/9.5/static/sql-notify.html
http://www.postgresql.org/docs/9.5/static/sql-listen.html
7. 游标
数组FOR循环,query FOR循环,游标FOR循环
PostgreSQL 全面支持例子
http://www.postgresql.org/docs/9.5/static/plpgsql-control-structures.html
http://www.postgresql.org/docs/9.5/static/plpgsql-cursors.html
(MySQL 暂不支持数组)
1. 数据类型
1.1 PostgreSQL
高精度numeric, 浮点, 自增序列,货币,字节流,时间,日期,时间戳,布尔,枚举,平面几何,立体几何,多维几何,地球,PostGIS,网络,比特流,全文检索,UUID,XML,JSON,数组,复合类型,域类型,范围,树类型,化学类型,基因序列,FDW, 大对象, 图像
1.2 MySQL
数字,时间,字符串,简单的GIS,JSON
2. 支持索引的数据类型
2.1 PostgreSQL
高精度numeric, 浮点, 自增序列,货币,字节流,时间,日期,时间戳,布尔,枚举,平面几何,立体几何,多维几何,地球,PostGIS,网络,比特流,全文检索,UUID,XML,JSON,数组,复合类型,域类型,范围,树类型,化学,基因序列
2.2 MySQL
数字,字符串,比特流,时间,全文检索,GIS
1. 索引方法
PostgreSQL 支持 btree, hash, gist, sp-gist, gin, brin , bloom , rum 索引
MySQL 支持 btree, gis类型索引
2. 规则表达式、前后模糊查询,支持索引检索
PostgreSQL 支持
3. 数组支持索引
PostgreSQL 支持
4. 全文检索支持索引
5. 索引扩展功能
5.1 PostgreSQL 支持 表达式索引,部分索引,联合索引
5.2 PostgreSQL 支持图像相似度、文本相似度搜索
5.3 自定义索引访问方法(bloom, rum, ......)
PostgreSQL支持
1. 多引擎支持
1.1 PostgreSQL
内置heap, 通过插件实现内存表, 列存储, 压缩存储, 流式存储, 非关系存储等。
1.2 MySQL
MyISAM, innodb, ...
2. 外部表
PostgreSQL支持任意外部数据源, (例如jdbc, file, odbc, oracle, mysql, db2, redis, mongo, ES, hadoop......)
https://wiki.postgresql.org/wiki/Fdw
3. dblink
PostgreSQL 支持
4. 内存表
PostgreSQL 通过外部表支持,或者通过插件支持
5. ES(弹性搜索引擎) 引擎
PostgreSQL 支持
1. 数据加密
PostgreSQL 支持加密数据类型,可选GPG加密算法
2. 认证方法
PostgreSQL 支持 密码、LDAP、AD、GSSAPI、SSPI、Ident、Peer、RADIUS、PAM、签名认证
3. 数据传输加密
PostgreSQL 支持
4. 行安全策略
PostgreSQL 支持
5. 数据库内部支持libselinux接口, (美国国家安全局制定的安全加强标准)
PostgreSQL 支持
http://www.postgresql.org/docs/9.5/static/runtime-config-query.html
1. GPU 并行计算支持
PostgreSQL 支持
2. 遗传优化器算法
PostgreSQL 支持CBO、CRO、遗传算法
3. HINT PLAN
4. CPU 并行计算
PostgreSQL 支持 (线性性能提升)
5. 自定义成本因子
PostgreSQL 支持
1. 是否支持采样查询
PostgreSQL 支持
2. 是否支持扩展采样算法
PostgreSQL 支持
3. 自定义数据类型
PostgreSQL 支持
4. 自定义索引方法
PostgreSQL 支持
5. 字符集自动转换, C扩展接口
PostgreSQL 支持
6. 自定义聚合
PostgreSQL 支持
7. 自定义窗口
PostgreSQL 支持
1. 类型扩展,操作符扩展,函数扩展,索引方法扩展,索引扩展,
PostgreSQL 支持
2. C触发器函数, C事件触发器函数
PostgreSQL 支持
3. 函数语言扩展
PostgreSQL 支持扩展函数支持接口, erlang, ....
4. 机器学习库
PostgreSQL 支持
5. 流式计算
PostgreSQL 支持
《facebook linkbench 测试PostgreSQL社交关系图谱场景性能》
《PostgreSQL 源码性能诊断(perf profiling)指南》
《"物联网"流式处理应用 - 用PostgreSQL实时处理(万亿每天)》
《PostgreSQL 百亿数据 秒级响应 正则及模糊查询》
《PostgreSQL 1000亿数据量 正则匹配 速度与激情》
《恭迎万亿级营销(圈人)潇洒的迈入毫秒时代 - 万亿user_tags级实时推荐系统数据库设计》
《从难缠的模糊查询聊开 - PostgreSQL独门绝招之一 GIN , GiST , SP-GiST , RUM 索引原理与技术背景》
《分析加速引擎黑科技 - LLVM、列存、多核并行、算子复用 大联姻 - 一起来开启PostgreSQL的百宝箱》
1. 函数(过程)语言
PostgreSQL支持几乎所有的地球编程语言,你可以用他们在数据库中编写UDF
plpgsql, sql, c, c++, java, javascript, R, python, perl, php, tcl, ruby, lua, ...
1. PostgreSQL完全支持以下下推功能
支持聚合算子下推
支持WHERE条件下推
支持JOIN下推
支持SORT下推
支持SELECT 子句下推
支持跨数据源JOIN
PostgreSQL
资源管控能力强。
单实例可以充分发挥HPC的性能,有多少资源就能使用多少资源。
PostgreSQL
PIRT,任意时间点恢复;FPW;
物理、逻辑级流式复制;金融级多副本;
社区状态
PostgreSQL
单一开源分支,社区力量较集中。全球有1000名以上的内核研发人员。
社区研发由核心组员和committer组成,持续5年以上对社区版本有贡献内核研发人员超过50位。
社区核心人员分别来自数据库厂商,数据库支持和服务公司,数据库最终用户的公司,形成了一个非常好的力量均衡。
社区活跃度
PostgreSQL
非常活跃(see git.postgresql.org, github.com/postgres)
《PostgreSQL 生态;原理、案例、开发实践、管理实践、学习资料、视频 - 珍藏级》
https://www.2ndquadrant.com/en/blog/postgresql-is-the-worlds-best-database/
作者丨digoal
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我正在尝试在Rails上安装ruby,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手
前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立