我使用Spring Boot和Spring Data MongoDB与底层分片MongoDB集群进行接口。我的Spring Boot应用程序通过mongos
路由器访问集群。
使用Spring Data MongoDB,可以通过@Document(collection=“nameOfCollection”)
指定对象持久化到的集合,或者默认为类名(第一个字母小写)。这些藏品不需要预先存在;它们可以在运行时创建。
要在MongoDB中分片集合,您需要
1-在数据库上启用分片:sh.enableSharding(“myDb”)
2-在分片数据库上对集合进行分片:sh.shardCollection(“myDb.myCollection”,{id:“hashed”})
假设有一个现有的分片数据库,Spring Data MongoDB是否提供了一种用分片密钥分片集合的方法?据我所知,我不能用Spring分片集合,因此必须在我的引导应用程序运行之前配置分片集合。我觉得很奇怪,Spring允许我使用未定义的集合,但没有提供配置集合的方法。
编辑:我已经看到了spring mongo的分片,以及如何在spring data for mongo中配置对分片集合的访问?这更多地涉及到分片MongoDB集群的部署。这个问题假设所有的管道都在那里,并且集合本身必须被切分。
在我们的更新查询中遇到了同样的问题,内部使用了保存()。
怎么解决的?
所以我现在已经从spring boot starter 2.1中重写了spring data mongo核心依赖项。x乘以3。我们的模型中的x版本现在支持@Sharded()注释。
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>3.1.5</version>
</dependency>
允许你说
@Document(collection = "hotelsdevice")
@Sharded(shardKey = { "device" })
public class Hotel extends BaseModel {
现在,它内部能够分辨出潜在的mongo,也就是我们的shardkey。我假设这将进一步修复count()查询,这些查询由于相同的错误“查询需要以碎片为目标”而失败
即使这不是一个Spring Data解决方案,一个潜在的解决方案是如何从java执行mongo admin命令,其中DB
可以从SpringMongoTemboard
获取。
DB db = mongo.getDB("admin");
DBObject cmd = new BasicDBObject();
cmd.put("shardcollection", "testDB.x");
cmd.put("key", new BasicDBObject("userId", 1));
CommandResult result = db.command(cmd);
尽管这个问题已经很老了,但我还是遇到了同样的问题,而且似乎从最近开始就没有提供自定义切分键了。
基于注释的Shard Key配置可在sping-data-mongob: 3. x
,https://docs.spring.io/spring-data/mongodb/docs/3.0.x/reference/html/#sharding
@Document("users")
@Sharded(shardKey = { "country", "userId" })
public class User {
@Id
Long id;
@Field("userid")
String userId;
String country;
}
从今天起,spring boot starter mongodb
附带了2个。不过是x版。
https://github.com/milvus-io/pymilvus/blob/master/pymilvus/orm/collection.py 在 pymilvus 中,只看到设置 shards_num, 没有看到设置副本数的地方?
我使用火花处理大文件,我有12个分区。我有rdd1和rdd2,我在它们之间建立了连接,而不是选择(rdd3)。我的问题是,我咨询了最后一个分区比其他分区太大,从分区1到分区11但分区12。所以我划分了。我将我的rdd3重新分区为,但我最后一个分区仍然太大。我如何平衡分区的大小? 我的i编写自己的自定义分区程序?
我在5台机器上安装了MongoDB 3.2.6,这些机器都形成了由2个碎片组成的碎片集群(每个碎片都是具有主次仲裁器配置的副本集)。 我还有一个数据库,其中包含非常大的集合(约50M记录,200GB),它是通过mongos导入的,mongos将其与其他集合一起放入主分片。 我在该集合上生成了散列ID,这将是我的分片密钥。 在thay之后,我用: 命令返回: 它开始碎裂。碎片的状态如下所示: 这一切
null
我开始在我的项目中使用spring-integration-kafka,我可以生产和消费来自kafka的消息。但是现在,我想为特定的分区生成消息,并从特定的分区消费消息。 例如,我想向分区3生成消息,而消费将只接收来自分区3的消息。 到目前为止,我的主题有8个分区,我可以向特定的分区发送消息,但是我还没有找到配置消费者只接收来自特定分区的消息的方法。 因此,任何关于我应该如何配置消费者与sping