2015-07-16 2 views
0

Открывать и закрывать соединение с сервером RethinkDB при каждом запросе HTTP? Я читал tutorial of the official examples. Он описывает приложение Express, и это в основном выглядит следующим образом:Как обрабатывать соединения DB по HTTP-запросам?

var app = express(); 
app.use(openConnection); 
app.use(/* do stuff */); 
app.use(closeConnection); 

Является ли это считается наилучшей практикой или это только практика, так как не существует родной пул соединений или другие подходы?

ответ

1

Когда речь заходит о том, как иметь дело с соединениями, есть несколько вариантов:

Single Connection

Самый простой вариант просто открыть одно соединение и использовать его через из вашего приложения , Это очень просто, но, вероятно, не работает для более крупных приложений, где вы можете выполнять множество запросов.

В JavaScript подключение может быть добавлено к объекту r и использоваться во всем приложении.

import r from 'rethinkdb'; 
import express from 'express'; 

let app = express(); 

r.connect().then((conn) => { 
    r.conn = conn; 
}); 

app.use('/table-list', (req, res) => { 
    r.db('test').tableList().run(conn) 
    .then((result) => { 
     return res.json(result);  
    }); 
}); 

Открыть & Закрыть

Вы также просто открыть и может закрыть соединение каждый раз, когда вы делаете запрос. Этот подход также прост, но он немного более подробный.

r.connect().then((conn) => 
    return r.db('test').tableList().run(conn) 
    .then((result) => { 
     console.log(result);  
     return result; 
    }) 
    .then(() => { 
     conn.close(); 
    }); 
}); 

Per Request Connection

Как уже отмечалось ранее, вы можете также открыть соединение каждого запроса, используйте эту связь во всем запросе, а затем закрыть его, когда запрос делается.

Пулы соединений

Наконец, вы можете также использовать пул соединений, если вы используете rethinkdbdash, который абстрагирует соединения для вас.

+0

Лично я не против открытия и закрытия по каждому запросу. Но я очень привык к пулам соединений, и я читал, что это де-факто лучшая практика в том, как обращаться с db-соединениями. Я не эксперт Coffeescript, но как переменная 'conn' в вашем примере соединения доступна в функции использования? – Amberlamps

+0

Он будет прикреплен к rethinkdb singleton ('r'). Вот почему, после подключения, я делаю 'r.conn = conn'. –

+0

Вам нужно быть осторожным с этим, потому что вы не хотите запускать какие-либо запросы перед подключением. –

Смежные вопросы