我已经在两个单独的服务器上安装了mongodb(1.8.3),并将它们设置为使用"副本集",如下所示:http://www.mongodb.org/display/DOCS/Replica+Set+Tutorial
到目前为止,一切看起来都很好:一个服务器被识别为主服务器,一个服务器被认为是辅助服
问题是我无法使用node.js(0.4.10)和mongoose(2.1.0)连接到数据库,如下所示:
var mongo = require('mongoose');
mongo.connectSet('mongodb://host/dbname,mongodb://host2/dbname');
Run Code Online (Sandbox Code Playgroud)
我总是收到以下错误消息:
TypeError: Cannot read property 'reconnectWait' of undefined
at new <anonymous> (/var/www/node/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connections/repl_set_servers.js:23:31)
at NativeConnection.doOpenSet (/var/www/node/node_modules/mongoose/lib/drivers/node-mongodb-native/connection.js:80:18)
at NativeConnection.openSet (/var/www/node/node_modules/mongoose/lib/connection.js:252:8)
at Mongoose.connectSet (/var/www/node/node_modules/mongoose/lib/index.js:116:27)
...
Run Code Online (Sandbox Code Playgroud)
搜索了一下,在某个地方发现了一个帖子,说我还必须提供副本集的名称 - 所以我尝试了这个:
mongo.connectSet('mongodb://host/dbname,mongodb://host2/dbname', rs_name:"name_replicaset"});
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么......?!
据我所知,MongoDB 中的复制是一种在mongods上的不同服务器中保留相同数据集的方法。我阅读了 MongoDB 文档,但没有找到与性能变化相关的任何内容。
我一直有一个问题,复制是否可以帮助 MongoDB 提高写/读操作性能?
我们有一个系统,我们有一个主/多个从。
目前一切都发生在 Master 上,而 Slave 只是在这里做备份。
我们使用 Codeigniter 作为开发平台。
现在我们决定使用从属设备进行读取,使用主设备进行写入查询。
有人告诉我,如果不修改源代码,这是不可行的,因为代理无法知道查询的类型。
任何想法如何在不给完美工作的系统造成太大损害的情况下继续进行...
我有一个名为'Contact Level\Customer Contact |的表格 客户联系人',这是一个响应文档,在我已将customerContact XPage与表单相关联的属性中.在所有视图面板控件中,我使用了"与文档的表单相关联的XPage"属性.
在服务器A上,使用任何视图控件中的$$ OpenDominoDocument.xsp方法正确打开XPage.
在服务器B上,它具有服务器A数据库的副本,XPage不会使用$$ OpenDocumentDocument.xsp方法从任何视图打开.我在服务器日志中看到的错误是'HTTP Web Server:Item Not Found Exception [db.nsf/$$ OpenDominoDocument.xsp?documentId = ......&action = openDocument]'.
我已从XPage中删除了一些代码,以追踪错误发生的位置,这是导致问题的多米诺骨牌文档设置.
我检查了表单属性,它们是正确的.
如果我将URL的$$ OpenDominoDocument.xsp部分更改为customerContact.xsp,则文档将打开而不会出现错误.
如果我更改视图面板属性以显式打开customerContact XPage,则文档将再次打开而不会出现错误.
我已经尝试更改窗体和XPage,因此它打开了"联系人"XPage(相同形式的几乎完全相同的非响应版本),XPage仍然存在错误.
我尝试在客户端保存文档,但XPage仍然存在错误.
我更改了表单名称以包含CustomerContact的新别名并修改了一个文档以使用新的表单名称,并且此文档打开时没有错误.这让我想知道Customer Contact名称中的空格是否导致了错误,但是有问题的数据库上有许多表单/ XPage,其他一些在别名中有空格,这是唯一出错的表单.
任何帮助将不胜感激.
我试图在CouchDB上部分复制数据库.这是我使用命令提示符实现的查询:
CURL POST http://localhost:5984/_replicate HTTP/1.1 Content-Type: application/json {"source":"source_db", "target":"target_db", "doc_ids":["00123f8-8uht1-81ia-n1762-81ubas81762121iaj1"]}
Run Code Online (Sandbox Code Playgroud)
这是错误:
Failed to connect to POST port 80: Timed Out
{"error":"method_not_allowed", "reason":"Only POST allowed"}
Run Code Online (Sandbox Code Playgroud)
导致错误的原因是什么?我如何摆脱它?
我需要使用单独的读取器/写入器 MySQL 服务器。一个写入器和一个(或多个)只读副本。
做这个的最好方式是什么?
我找到了很多例子:
http://www.dragishak.com/?p=307
使用特殊的 JDBC 驱动程序: com.mysql.jdbc.ReplicationDriver
用法是:
@Transactional(readOnly=true)
@ReadOnlyConnection
public Result serviceMethod(…) {
…
}
Run Code Online (Sandbox Code Playgroud)
使用弹簧AbstractRoutingDatasource:
用法:
@Transactional(readOnly = true)
public Page<BookDTO> getBooks(Pageable p) {
try{
DbContextHolder.setDbType(DbType.REPLICA1); // <----- set ThreadLocal DataSource lookup key
Run Code Online (Sandbox Code Playgroud)
在每种方法中,我都需要设置 DbType。
是否可以自动将“读取查询”发送到副本服务器并将“写入查询”(插入/更新)发送到主服务器?
第二个问题:
我想每个用户有一个 mysql 数据库(非常大)。我预计大约有 2000 名用户。所以我不能为每个用户*读者+作者定义数据源。
例子:
spring.ds_items.driverClassName=com.mysql.jdbc.Driver
spring.ds_items.url=jdbc:mysql://mysql-master/user1
spring.ds_items.username=root
spring.ds_items.password=12345
spring.ds_items.driverClassName=com.mysql.jdbc.Driver
spring.ds_items.url=jdbc:mysql://mysql-replica1/user1
spring.ds_items.username=root
spring.ds_items.password=12345
spring.ds_items.driverClassName=com.mysql.jdbc.Driver
spring.ds_items.url=jdbc:mysql://mysql-master/user2
spring.ds_items.username=root
spring.ds_items.password=12345
spring.ds_items.driverClassName=com.mysql.jdbc.Driver
spring.ds_items.url=jdbc:mysql://mysql-replica1/user2
spring.ds_items.username=root
spring.ds_items.password=12345
Run Code Online (Sandbox Code Playgroud)
我想要一个“主 mysql 数据库”,其中包含如下表:
user db_name
--------------
test1 db_test1
test2 db_test2
Run Code Online (Sandbox Code Playgroud)
如果我需要用户的一些数据,test2我会查看“主数据库”并获取 …
mongodb ×2
mysql ×2
codeigniter ×1
couchdb ×1
curl ×1
hibernate ×1
java ×1
mongoose ×1
mysql-proxy ×1
node.js ×1
nosql ×1
opendocument ×1
replication ×1
spring ×1
xpages ×1