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选型对比的更多相关文章

  1. 各种ORM框架对比(理论篇,欢迎来观摩)

    各种ORM框架对比 目前框架有以下 PetaPoco Dapper.NET Massive Simple.Data Chain PetaPoco 轻量级,以前单文件,目前有维护形成项目级别,适合多个数 ...

  2. 各种ORM框架对比(理论篇,欢迎来观摩,并且纠正部分错误,防止误区)

    各种ORM框架对比 目前框架有以下 PetaPoco Dapper.NET Massive Simple.Data Chain PetaPoco 轻量级,以前单文件,目前有维护形成项目级别,适合多个数 ...

  3. MQ选型对比RabbitMQ RocketMQ ActiveMQ

    原文:MQ选型对比RabbitMQ RocketMQ ActiveMQ 几种MQ产品说明:     ZeroMQ :  扩展性好,开发比较灵活,采用C语言实现,实际上他只是一个socket库的重新封装 ...

  4. ORM框架对比以及Mybatis配置文件详解

    ORM框架对比以及Mybatis配置文件详解 0.数据库操作框架的历程 (1) JDBC ​ JDBC(Java Data Base Connection,java数据库连接)是一种用于执行SQL语句 ...

  5. Net环境下比较流行的ORM框架对比

    个人感觉在Java领域大型开发都离不了ORM的身影,所谓的SSH就是Spring+Struts+Hibernate,除了在学习基础知识的时候被告知可以使用JDBC操作数据库之外,大量的书籍中都是讲述使 ...

  6. 我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比(转载)

    转载自:https://www.sojson.com/blog/48.html 前言: MQ 是什么?队列是什么,MQ 我们可以理解为消息队列,队列我们可以理解为管道.以管道的方式做消息传递. 场景: ...

  7. uni-app,wex5,APPcan,ApiCloud几款国内webapp开发框架的选型对比

    框架列表. https://www.cnblogs.com/xiaxiaxia/articles/5705557.html 前言 近期,要开一个新的项目,APP类型.最重要的需求就是能够随时调整APP ...

  8. 为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比

    原文:https://www.sojson.com/blog/48.html 前言: MQ 是什么?队列是什么,MQ 我们可以理解为消息队列,队列我们可以理解为管道.以管道的方式做消息传递. 场景: ...

  9. MQ选型对比ActiveMQ,RabbitMQ,RocketMQ,Kafka 消息队列框架选哪个?

    最近研究消息队列,发现好几个框架,搜罗一下进行对比,说一下选型说明: 1)中小型软件公司,建议选RabbitMQ.一方面,erlang语言天生具备高并发的特性,而且他的管理界面用起来十分方便.不考虑r ...

随机推荐

  1. centos安装nodejs二进制包

    1.下载nodejs的二进制包 wget https://nodejs.org/dist/v6.3.1/node-v6.3.1-linux-x64.tar.xz 2.解压下载的安装包 tar xf n ...

  2. JavaScript js调用堆栈(三)

    本文主要深入介绍JavaScript内存机制 内存模型 JS内存空间分为栈(stack),堆(heap),池(一般也会归类为栈中),其中栈存放变量,堆存放复杂对象,池存放常量. 注:闭包中的变量并不保 ...

  3. Openresty最佳案例 | 第9篇:Openresty实现的网关权限控制

    转载请标明出处: http://blog.csdn.net/forezp/article/details/78616779 本文出自方志朋的博客 简介 采用openresty 开发出的api网关有很多 ...

  4. iOS之创建表格类视图WBDataGridView

    项目中创建表格, 引用头文件 #import "WBDataGridView.h" - (void)viewDidLoad{ [superviewDidLoad]; // Do a ...

  5. 【ntp时间校准配置】

    Ntp(网络时间协议)是一种可以通过TCP/IP网络传播,其架构模式可分为C/S(客户端/服务器),PTP(对等),broatcast(广播), mutilbrocast(组播),无论在任何系统或设备 ...

  6. MySql外键建立在哪里(更新)

    一对一的时候:分为主表和附表  外键建立在附件上  附表的外键关联到主表的主键上,Example:学生表和学生信息表,在学生信息表上建立外键 一对多的时候:分为一和多  外键建立在多上  Exampl ...

  7. less学习一

    Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量.Mixin.函数等特性,使 CSS 更易维护和扩展. Less 可以运行在 Node 或浏览器端. less文件只有被编译后才 ...

  8. 20190105-打印字母C,H,N,口等图像和杨辉三角

    1. 打印字母C ****** * * * * ****** def print_c(n): print('*' * n) for i in range(n): print('* ') print(' ...

  9. Django之模型---ORM简介

    ORM ORM,是“对象-关系-映射”的简称,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因 ...

  10. 让CPU使用率正弦变化

    网络上流传一个面试题,说如何编程让CPU的使用率按照正弦方式变化 代码如下(运行环境Linux): #include <stdio.h> #include <stdlib.h> ...