我有一个MongoDB,它存储了204.639.403项的产品数据,这些数据已经由项目的国家分散到同一个MongoDB进程中同一物理机器上运行的四个逻辑数据库中.
这是一个列表,其中包含每个逻辑数据库的文档数:
我的问题是数据库写入性能越来越差,特别是对四个数据库中最大的数据库(De)的写入变得非常糟糕,根据iotopmongod进程使用99%的IO时间,写入少于3MB,读取数据为1.5MB每秒.这导致长锁定数据库,100%+锁定通常根据mongostat- 即使所有进程写入和读取到其他国家/地区数据库已被停止.当前从站达到最大为6的LOAD,副本集主机同时具有2-3的负载,因此也导致复制滞后.
每个数据库都有相同的数据和索引结构,我使用最大的数据库(De)仅用于进一步的示例.
这是从数据库中取出的一个随机项,就像示例一样,该结构经过优化,只需一次读取即可收集所有重要数据:
{
"_id" : ObjectId("533b675dba0e381ecf4daa86"),
"ProductId" : "XGW1-E002F-DW",
"Title" : "Sample item",
"OfferNew" : {
"Count" : 7,
"LowestPrice" : 2631,
"OfferCondition" : "NEW"
},
"Country" : "de",
"ImageUrl" : "http://….jpg",
"OfferHistoryNew" : [
…
{
"Date" : ISODate("2014-06-01T23:22:10.940+02:00"),
"Value" : {
"Count" : 10,
"LowestPrice" : 2171,
"OfferCondition" : "NEW"
}
} …Run Code Online (Sandbox Code Playgroud) 我有以下实体,item最多可以有两个类别,主要和次要.两个类别都使用a 映射ManyToOne到category表JoinColumnsOrFormulas.第一个EAGER按预期获取,但第二个不会出现在SQL语句中并且会延迟加载.这种延迟加载导致经典的n + 1问题.
这是我的项目实体,应该加入两个类别实体:
@Entity
@Table(name = "item", schema = "public", catalog = "stackoverflow_question")
@DynamicUpdate
public class Item extends StackOverflowQuestionEntity {
@Id
@Column(name = "id")
protected Long id;
@Column(name = "site")
private String site;
@ManyToOne
@JoinColumnsOrFormulas({
@JoinColumnOrFormula(formula = @JoinFormula(value = "site", referencedColumnName = "site")),
@JoinColumnOrFormula(formula = @JoinFormula(value = "primary_category_id", referencedColumnName = "category_id"))
})
private Category primaryCategory;
@Column(name = "primary_category_id")
private Long primaryCategoryId;
@ManyToOne
@JoinColumnsOrFormulas({
@JoinColumnOrFormula(formula = @JoinFormula(value = "site", …Run Code Online (Sandbox Code Playgroud) 我正在学习ZF2,是否有可能ZF1中的Form装饰器模式已被删除?
我是否正确编写自己的视图助手,装饰我的表单?