Java 如何仅从主服务器执行读取操作
我们将MongoDB用于基于JavaEE的应用程序。 我们使用一个主服务器和两个辅助服务器作为Mongo DB集群的一部分 作为我们架构的一部分,Mongo DB不断进行读/更新/写操作 因此,当我们从Mongo DB执行抓取操作时,会得到脏读(零值) 为了解决这个问题,我尝试以这样一种方式配置它:读取操作总是从主操作本身获取,写入/更新可以转到主/辅助操作 请让我知道这是否可行(始终从主设备读取,并使用任何主/辅助设备进行写入/更新)Java 如何仅从主服务器执行读取操作,java,mongodb,jakarta-ee,Java,Mongodb,Jakarta Ee,我们将MongoDB用于基于JavaEE的应用程序。 我们使用一个主服务器和两个辅助服务器作为Mongo DB集群的一部分 作为我们架构的一部分,Mongo DB不断进行读/更新/写操作 因此,当我们从Mongo DB执行抓取操作时,会得到脏读(零值) 为了解决这个问题,我尝试以这样一种方式配置它:读取操作总是从主操作本身获取,写入/更新可以转到主/辅助操作 请让我知道这是否可行(始终从主设备读取,并使用任何主/辅助设备进行写入/更新) 这样的设计会有什么负面影响吗?要排除从属读取,必须设置相应
这样的设计会有什么负面影响吗?要排除从属读取,必须设置相应的。请参阅有关连接类的文档 大概是这样的:
mongo.setReadPreference(ReadPreference.primary());
但是,文档中说,默认情况下,所有读取都应该已经转到主:
默认情况下,所有读写操作都将在主设备上进行,但可以通过更改读取首选项从辅助设备读取:
您确定没有在应用程序中打开从属读取吗?要排除从属读取,您必须设置相应的。请参阅有关连接类的文档 大概是这样的:
mongo.setReadPreference(ReadPreference.primary());
但是,文档中说,默认情况下,所有读取都应该已经转到主:
默认情况下,所有读写操作都将在主设备上进行,但可以通过更改读取首选项从辅助设备读取:
你确定没有在应用程序中打开从属读取吗?由于mongoDB在插入中使用分段写入,因此即使在单个节点中,写入操作也可能存在延迟。 使用写关注点避免问题(脏数据): 您可以阅读有关写入操作的更多信息:
这表明不建议在生产环境中使用不带错误检查的写入操作。由于mongoDB在插入中使用分段写入,因此即使在单个节点中,写入操作也可能存在延迟。 使用写关注点避免问题(脏数据): 您可以阅读有关写入操作的更多信息:
这表明不建议在生产中使用不带错误检查的写入。任何负面影响-显然,您的主节点现在是瓶颈,因为它必须同时处理读取和写入。若网络饱和,或者你们启动了一个昂贵的更新(阻止了读卡器),那个么你们就有麻烦了。而且,你们只能向主服务器写。您不能向secondary写入。谢谢,这很有意义,我将排除这种尝试。知道如何避免脏读吗?我认为
脏读
意味着程序在其他程序提交写入之前获得了未提交的数据。但在你的情况下,看起来你想尽快得到别人写的数据。如果我明白你的意思,也许你可以将数据的ASAP部分移动到超级大内存和快速磁盘主机上,一个节点,没有辅助。“任何负面影响”-显然,你的主节点现在是瓶颈,因为它必须处理读写。若网络饱和,或者你们启动了一个昂贵的更新(阻止了读卡器),那个么你们就有麻烦了。而且,你们只能向主服务器写。您不能向secondary写入。谢谢,这很有意义,我将排除这种尝试。知道如何避免脏读吗?我认为脏读
意味着程序在其他程序提交写入之前获得了未提交的数据。但在你的情况下,看起来你想尽快得到别人写的数据。如果我明白你的意思,也许你可以尽快将数据的一部分移动到一些超级大内存和快速磁盘主机上,一个节点,没有辅助节点。谢谢,但如果我这样做,正如你所说,会有负面影响知道吗??当主人变得瓶颈时???@PreethiJain:这就是代价。您想要缩放读取-添加从属。你想缩放写入-添加碎片。是的,我确信我们没有在应用程序上打开从属读取。谢谢你的回复。谢谢,但是如果我这样做,就像你说的那样会有负面影响知道吗??当主人变得瓶颈时???@PreethiJain:这就是代价。您想要缩放读取-添加从属。你想缩放写入-添加碎片。是的,我确信我们没有在应用程序上打开从属读取。谢谢你的回复。