ORM选型对比
ORM框架选型
ORM框架选型
jian A YEAR AGO (2017-04-10) orm, database
选型标准:实现O/R mapping,基于promise,支持原生SQL语句,支持连接池,支持事务,支持ES6/ES7。
name star createtime
persistencejs 1681 2010-01-31
sequelize 9354 2010-07-18
node-orm2 2384 2012-11-25
typeorm 1814 2016-02-21
bookshelf 4005 2013-03-10
waterline 3837 2012-11-25
mongoose 11936 2010-04-04
node-mysql 9030 2013-03-05
knex 4326 2012-12-23
备注:以上数据截止2017年4月8日
mongoose只支持mongodb,放弃;node-mysql与knex非ORM框架,放弃;persistencejs2016年以后未更新,放弃。
sequelize
https://github.com/sequelize/sequelize
文档齐全,star最多。
支持数据库:postgresql、mysql、sqlite和sqlserver
特性: 模型定义 模型同步、删除 1:1 1:m n:m 关联
穿透模型 promise
hooks/callbacks/lifecycle
支持原生SQL 连接池 事务 迁移 CLI
node-orm2
https://github.com/dresende/node-orm2
支持数据库: mysql & mariadb
postgresql
amazon redshift
sqlite
mongodb(beta版)
特性: 创建模型、同步、删除、批量新增、获取、查询、删除、统计、集合 创建模型关联 定制有效性验证 模型实例缓存 通过插件支持分页、事务、mysql全文搜索、迁移。 支持原生SQL语句。 连接池,可通过pool参数设置。 promise通过q-rom库实现。
项目近期更新少,与sequelize竞争完全处于劣势,放弃。
typeorm
https://github.com/typeorm/typeorm
采用TypeScript编写的基于node.js的ORM框架,支持使用TypeScript或javascript(ES5,ES6,ES7)开发。
支持数据库:mysql & mariadb、postgresql、sqlite、sqlserver和oracle
特性: 根据Models自动创建数据库表; 可以透明的insert/update/delete数据库对象; 映射数据库表到javascript对象,映射列到javascript对象属性; 提供表的一对一,多对一,一对多,多对多关系处理 支持连接池 支持事务
使用typescript实现,项目比较新,放弃。
bookshelf
https://github.com/tgriesser/bookshelf
bookshelf是基于knex的ORM框架。
支持数据库:mysql & mariadb、postgresql、sqlite3和Oracle
特性: 事务 连接池 流式查询 promise和callback API
原生SQL语句
waterline
https://github.com/balderdashy/waterline
waterline是从Sails框架衍生出来的ORM框架。
支持数据库:mysql、mongo、postgresql、redis等
文档包含在sail文档中:http://sailsjs.com/documentation/reference/waterline-orm 文档不完善,放弃。
最终对比
从以上分析,我们最终从sequelize和bookshelf两者之间做出选择。 项目数据对比: https://nodejs.libhunt.com/project/sequelize/vs/bookshelf?rel=cmp-cat
依赖于sequelize的项目: https://www.npmjs.com/browse/depended/sequelize
依赖于bookshelf的项目: https://www.npmjs.com/browse/depended/bookshelf
1W start以上项目依赖:
ghost项目使用bookshelf
react-starter-kit项目使用sequelize
两者文档都很全面。 sequelize的star数量和版本更新频率高于bookshelf,所以推荐使用Sequelize。
ORM选型对比的更多相关文章
- 各种ORM框架对比(理论篇,欢迎来观摩)
各种ORM框架对比 目前框架有以下 PetaPoco Dapper.NET Massive Simple.Data Chain PetaPoco 轻量级,以前单文件,目前有维护形成项目级别,适合多个数 ...
- 各种ORM框架对比(理论篇,欢迎来观摩,并且纠正部分错误,防止误区)
各种ORM框架对比 目前框架有以下 PetaPoco Dapper.NET Massive Simple.Data Chain PetaPoco 轻量级,以前单文件,目前有维护形成项目级别,适合多个数 ...
- MQ选型对比RabbitMQ RocketMQ ActiveMQ
原文:MQ选型对比RabbitMQ RocketMQ ActiveMQ 几种MQ产品说明: ZeroMQ : 扩展性好,开发比较灵活,采用C语言实现,实际上他只是一个socket库的重新封装 ...
- ORM框架对比以及Mybatis配置文件详解
ORM框架对比以及Mybatis配置文件详解 0.数据库操作框架的历程 (1) JDBC JDBC(Java Data Base Connection,java数据库连接)是一种用于执行SQL语句 ...
- Net环境下比较流行的ORM框架对比
个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spring+Struts+Hibernate,除了在学习基础知识的时候被告知可以使用JDBC操作数据库之外,大量的书籍中都是讲述使 ...
- 我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比(转载)
转载自:https://www.sojson.com/blog/48.html 前言: MQ 是什么?队列是什么,MQ 我们可以理解为消息队列,队列我们可以理解为管道.以管道的方式做消息传递. 场景: ...
- uni-app,wex5,APPcan,ApiCloud几款国内webapp开发框架的选型对比
框架列表. https://www.cnblogs.com/xiaxiaxia/articles/5705557.html 前言 近期,要开一个新的项目,APP类型.最重要的需求就是能够随时调整APP ...
- 为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比
原文:https://www.sojson.com/blog/48.html 前言: MQ 是什么?队列是什么,MQ 我们可以理解为消息队列,队列我们可以理解为管道.以管道的方式做消息传递. 场景: ...
- MQ选型对比ActiveMQ,RabbitMQ,RocketMQ,Kafka 消息队列框架选哪个?
最近研究消息队列,发现好几个框架,搜罗一下进行对比,说一下选型说明: 1)中小型软件公司,建议选RabbitMQ.一方面,erlang语言天生具备高并发的特性,而且他的管理界面用起来十分方便.不考虑r ...
随机推荐
- 获取订单的product_id 和订单的数量
php 获取订单的product_id 和相对id的数量 <?php foreach ($val->groupResults(2) as $key2=>$val2):?> &l ...
- JavaScript 基础(一)
基本语法: 区分大小写: ECMAScript 中的一切(变量,函数名和操作符)都区分大小写. 标识符: 表示符就是指,变量,函数,属性名字,或者函数的参数. 1.第一个字符必须是一个字母,下划线(_ ...
- 【2018 ICPC亚洲区域赛沈阳站 L】Tree(思维+dfs)
Problem Description Consider a un-rooted tree T which is not the biological significance of tree or ...
- Python的核心数据类型
Python的核心数据类型有:数字,字符串,列表,字典,元组,文件等. 数字 数字类型有:整形int,浮点型float,复数complex,布尔型bool. 整形 整型数是不带有小数部分的 ...
- Shell 脚本进程并发&进程数控制
Shell 都以串行的方式自上而下执行命令,不适用需要大量作业的场景. 学习此篇shell脚本进程并发,能够大大提高工作效率~ 通过wait 和 & 后台符号 可以实现并行,但无法控制进程数. ...
- doT.js使用介绍
doT.js特点是快,小,无依赖其他插件,压缩版仅有4K大小. doT.js详细使用介绍 使用方法: 1 2 3 4 5 6 7 {{ }} 模板 开始标记 结束标记 {{= }} 赋值 {{~ ...
- 九、IIC驱动原理分析
学习目标:学习IIC驱动原理: 一.IIC总线协议 IIC串行总线包括一条数据线(SDA)和一条时钟线(SCL),支持“一主多从”和“多主机”模式:每个从机设备都有唯一的地址来识别. 图 1 IIC ...
- 11 非阻塞套接字与IO多路复用(进阶)
1.非阻塞套接字 第一部分 基本IO模型 1.普通套接字实现的服务端的缺陷 一次只能服务一个客户端! 2.普通套接字实现的服务端的瓶颈!!! accept阻塞! 在没有新的套接字来之前,不能处理已经建 ...
- Python学习手册之控制结构(一)
在上一篇文章中,我们对 Python 进行了简单介绍和介绍了 Python 的基本语法,现在我们继续介绍 Python 控制结构. 查看上一篇文章请点击:https://www.cnblogs.com ...
- python学习之常用模块