gpt4 book ai didi

mongodb - 使用 Morphia 测试 MongoDB 集群

转载 作者:可可西里 更新时间:2023-11-01 09:14:39 26 4
gpt4 key购买 nike

我一直在副本集配置中试用 MongoDB,以了解它如何扩展/执行/应对。

我一直在使用Morphia (Mongo's Java drivers 之上的 POJO 映射层)将 10,000 个简单的随机文档保存到单个集合中。我已经用 @Entity(concern="REPLICAS_SAFE") 注释注释了我的 POJO(下面代码段中的 MyData),希望发送到数据库的数据将安全地持久化。

我的 POJO 由 ObjectId 字段(Mongo 的主键类型)、一个随机长度的随机字符(最多 20 个字符)的 String 和一个 组成>long 使用 Random.nextLong() 生成。

我的代码如下:

for (int i=0;i<10000;i++) {
final MyData data = new MyData();

boolean written = false;
do {
try {
ds.save(data); //ds is of type DataStore
written=true;
} catch (Exception e) {
continue;
}
}
while (!written);
}

我设置了一个四节点副本集集群,运行了上面的程序,然后开始比喻地拔掉电缆以查看发生了什么。

期望的结果是程序一直运行,直到它成功地将所有文档保存到数据库。

几次之后的实际结果是:

  • Java 报告它已提交 10k 个条目,但数据库只有 <10k
  • Java 报告它已提交 <10k,而数据库报告相同或更少的值
  • 一切正常

在一种情况下,恢复的节点无法真正 catch 主节点,必须使用已删除的数据库从头开始。尽管将 opfile 参数增加到 2 gig,但我认为这足以重放 10,000 行非常简单的数据。

其他你应该知道的:

  1. 所有这些都在单个硬件(2 gig Pentium D!)上运行,集群在两个 32 位 Ubuntu Server VirtualBox 实例上运行,每个实例有 128 兆内存,Java 客户端在 Windows XP 主机内运行.每个虚拟机上运行了两个 mongod 进程,外加一个 arbiter。也在一台虚拟机上运行。
  2. 两台虚拟机上的时钟关闭了几秒钟(我需要安装 VirtualBox Guest Additions 来解决这个问题),但数量不多 - 10gen 说时间不应该成为集群的问题,但我我想我会提到它。

我知道 Mongo 在 32 位机器上的 2 gig 限制,事实上 other people有消失的记录,我知道我正在做这些测试的机器并不完全在前 500 名中(这就是为什么我选择保留的数据很小)但是当我的测试工作时,它们工作得很好.

我的问题是证明 Mongo 还没有准备好迎接黄金时段,还是我做错了什么?

我使用的是 1.6.5。

非常感谢任何见解、提示、技巧、指示、解释或批评!

ps:我不是在吹牛 - 我真的很喜欢 NoSQL 的想法,因为它适用于各种数据,所以我真的希望它能工作,但到目前为止我运气不佳!

最佳答案

MongoDB 现在肯定在很多地方都在“黄金时段”使用。因此,值得一看这里可能发生的其他情况。

这里有几个入门问题:

  1. “new MyData()”是如何工作的?有没有可能你在攻击现有的 ID?
  2. 您的副本集是否在整个过程中“启动”了?你只是在“继续”错误,所以我不太确定错误是如何处理的。 Morphia 是否正确冒泡错误?

我真的很感激你已经完成并编写了一种“测试用例”,但我认为你需要更深入地挖掘这个案例。您可以尝试以下两件事吗?

  1. MyData 上的 _id 设置为 i。通过这种方式,您可以看到您正在死亡的过程中。
  2. 每次出现错误时执行 console.write 或等效操作。看看您是否无法弄清楚数据实际去了哪里。
  3. 通过同样的措施,在每次成功保存时执行 console.write

如果您执行这些步骤,您将获得一个记录正在发生的事情的日志,并且您将能够查看保存或未保存的内容,并将其与数据库中的数据进行比较。

我知道这有点乏味,但我认为您遇到了两个问题之一,执行这些步骤将有助于解决这个问题。

要么 1. Morphia 没有正确报告错误(没有被正确处理) 2. 你发现副本集存在实际问题 3. 你被“最终一致性”捕获了。

无论哪种方式,有了更多细节,我们应该能够深入研究问题。

关于mongodb - 使用 Morphia 测试 MongoDB 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4471855/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com