記錄一下幾個在實踐中用到的與 Node.js & Database 相關的 Tools / Frameworks。
主要用到以下幾個:

3者之間的關係如下圖:

database

Bookshelfjs

Bookshelfjs 是一個 node.js 實現的 Database ORM。

  • Bookshelfjs 類似與 Backbone.js 的風格。提供 Model, Collection 的概念。
  • 使用了 bluebird 的 promises 實現。來幫助異步操作。
  • 使用 Knexjs 做為 Database query builder 和 connection 管理。

Bookshelfjs 實踐的 Gist: https://gist.github.com/xiongjia/eeaf9d0d7571b4d15f3f

  • 在 Gist 中 README 中描述了 Sample 的用法和 Database 的 Schema
  • orm.js 定義了 Database 的 Objects.

Knexjs

Knexjs 是一個 node.js 實現 SQL query builder 。

  • 目前的版本支持 Postgres, MySQL, MariaDB and SQLite3
  • 使用了 bluebird 的 promises 實現。來幫助異步操作。
  • 使用 generic pool 來做 Database connection pool 的管理。
  • 支持 Database transaction; Schema builder

Knexjs 實踐的 Gist: https://gist.github.com/xiongjia/85df587ce3535d1c6151

  • 在 Gist 中 README 中描述了 Sample 的用法和 Database 的 Schema

Liquibase

Liquibase 是一個在開發過程中使用的 Database tool。 可以在通過它的 Data change log 來管理開發過程中數據庫的變化過程。也可以做 rollback; update; migrate 等操作。

Liquibase 實踐的 Gist: https://gist.github.com/xiongjia/455c27bb728325542f66

  • 在 Gist 中 README 中描述了 Sample 的用法和 Database 的 Schema
  • Liquibase 是基於 Java 的,必須正確配置對應的 JDBC Driver。具體參看 Gist 中的 README。

最後

通過 ORM 訪問數據庫的優劣:

好處:

  • 同一份代碼工作在不同的數據庫。(比如: 開發環境用 SQLite3, 生產環境用 Postgres)
  • 部分避免 SQL Injection attacks。
  • 有利於代碼結構和可持續性開發。

壞處:

  • 增加學習成本。 (比如: 必須理解 Backbone Model, Collection 的工作原理; promises 的風格 等)
  • 目前 Knexjs 支持的數據庫較少,只有 Postgres, MySQL, MariaDB and SQLite3
  • 喪失部分數據庫特性,可能影響性能。


blog comments powered by Disqus