Что является самым быстрым, @Entity или @Embedded? - PullRequest
1 голос
/ 21 сентября 2011

Я новичок (сегодня) в NoSql MongoDb и пытаюсь понять Morphia.
Я хочу, чтобы один @Entity был таким:

Если у меня есть 3 таблицы (коллекции) с именем
Stat
* 1006 в список друзей * Userdata
Я сохраняю UserData.Class в праве Userdata и Statistic.Class в Stat и так далее ...

Я думал, если я дам каждому пользователю уникальный UUID-номер ObjectId, а затем каждый Statistic и FriendList, имеющий этот UUID-номер в качестве ObjectId. Потому что, если программе нужно только запустить статистику, она будет загружаться / работать только со статистикой.

@Entity
public class UserData {

    @Id private ObjectId id = "UUID 123456789;
    public String userName = "";
    public String password = "";    
    @Embedded
    private Statistic statistic;
    @Embedded
    private FriendList friendList;
}

Если бы запрос на получение пользовательских данных составлял примерно 18000 в час, было бы быстрее объявить их следующим образом:
(я использую один и тот же ObjectId, и они хранятся в отдельных коллекциях (таблицах)

@Entity
public class UserData {

    @Id private ObjectId id = "UUID 123456789;
    public String userName = "";
    public String password = "";
}

@Entity
public class Statistic {

    @Id private ObjectId id = "UUID 123456789;
    public int loginTimes;
    public String gps;

}

@Entity
public class FriendList {

    @Id private ObjectId id = "UUID 123456789;
    public ArrayList<String> fiends;
}

Ответы [ 2 ]

2 голосов
/ 21 сентября 2011

Я думаю, что правильным является использование DBRef или Embedded.

Если вы хотите, чтобы какой-то объект списка также был в другом объекте, используйте DBRef, если нет, используйте внедренный.

Например,в сообщении в блоге комментарии никогда не будут использоваться в другом сообщении, поэтому он встроен.

Итак, используйте что-то вроде:

@Entity
public class UserData {

@Id private ObjectId id = "UUID 123456789;
public String userName = "";
public String password = "";    
@Embedded
private Statistic statistic;
@Embedded
private List<Friends> friendList;
}

надеюсь, это поможет.

0 голосов
/ 22 сентября 2012

Внедренное всегда быстрее, потому что ссылка хранится в другом физическом месте.

...