Не так давно в slack’е ресинковцев обсуждение было о том, какие ORM кто использует в node.js. Я лично не использую их. Вообще, для работы с RethinkDB только пул соединений использую.
Если у вас поболее, чем полтора юзера, то гонять данные по одному соединению вы не сможете. Поэтому, вы захотите использовать какой-то пул. Я лично этот использую. Сама инициализация примерно такая:
1 2 3 4 5 6 7 8 9 10 11 |
var rethink = require('rethinkdb'); var Pool = require('rethinkdb-pool'); pool = Pool(rethink, { host:rHost, port:rPort, db:'my_db', min: 5, max: 20 }); pool.r = rethink; |
Теперь в коде вы можете использовать pool.r
для создание запросов. Например, простой запрос на получение записи:
1 2 3 4 5 6 |
var getDoc = pool.r.table("documents").get(1); pool.run(query, function (error, ret) { if (error !== null) { // ошибочка } }); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
'use strict' var debug = require('debug')('rethinkdb:pool') var Pool = require('generic-pool').Pool function toArray (cursorOrResult) { if (cursorOrResult && typeof cursorOrResult.toArray === 'function') { return cursorOrResult.toArray() } else { return cursorOrResult } } module.exports = function (r, options) { function create (done) { return r.connect(options, done) } function destroy (connection) { connection.close() } var pool = new Pool({ name: 'rethinkdb', create: create, destroy: destroy, log: options.log || debug, max: options.max || 10, min: options.min || 1, idleTimeoutMillis: options.idleTimeoutMillis || 30 * 1000 }) var Promise = r._bluebird function acquire () { return new Promise(function (resolve, reject) { pool.acquire(function (e, conn) { e ? reject(e) : resolve(conn) }) }).disposer(function (conn) { pool.release(conn) }) } pool.run = function (query, opt, done) { if (typeof opt === 'function') { done = opt opt = null } var p = Promise.using(acquire(), function (conn) { return query.run(conn, opt) }).then(toArray) if (done) { p.then(function (d) { done(null, d) }).catch(done) } else { return p } } return pool } |