MongoDB를 복제본 설정에서 시험 해보고 확장/수행/대응 방법을 살펴 보았습니다.Morphia로 MongoDB 클러스터링 테스트하기
나는 10,000 개의 간단한 무작위 문서를 하나의 컬렉션에 저장하기 위해 Morphia (Mongo's Java drivers 위의 POJO 매핑 레이어)을 사용했습니다. 나는 @Entity(concern="REPLICAS_SAFE")
어노테이션으로 나의 POJO (아래 주석에) 주석을 달았으며, 데이터베이스로 보내진 데이터가 안전하게 지속될 수 있기를 바랍니다.
내 POJO는 ObjectId
필드 (몽고의 기본 키 타입), 임의의 길이 (최대 20 자)의 임의의 문자의 String
및 Random.nextLong()
를 사용하여 생성 된 long
들로 구성되었다.
내 코드는 다음과 같은 : 내가 시작 후, 네 개 노드 복제-설정 클러스터를 설정 위의 프로그램을 실행하고,
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);
}
은유 적으로 무슨 일이 있었는지보기 위해 케이블을 잡아 당겨.
원하는 결과는 모든 문서를 데이터베이스에 성공적으로 유지할 때까지 실행되는 프로그램입니다.
- 자바는 10,000 항목을 저지른하지만 데이터베이스는 10,000
- 자바가 < 10K 데이터베이스를 저지른보고 <을 가진보고 : 몇 간다 후
실제 결과는, 중 하나였다 백업 가져 있었다 같은 값 또는 더 적은
- 다 잘
한 경우 작업 노드 중 하나를보고 실제로 PRIMARY 노드를 따라갈 수 없으며 삭제 된 데이터베이스로 처음부터 시작되어야했습니다. 이것은 opfile 매개 변수가 2 기가로 증가 했음에도 불구하고 매우 단순한 데이터 10,000 개를 재생할 수있을 것이라고 생각했을 것입니다. 당신이 알아야 할
다른 것들 :
이 모든 단일 하드웨어에서 실행되는- (2 기가 펜티엄 D!) 128 메가 두 개의 32 비트 우분투 서버 버추얼 인스턴스에서 실행되는 클러스터 Windows XP 호스트에서 실행되는 Java 클라이언트와 각각의 RAM이 필요합니다. 2 개의
mongod
프로세스가 각 가상 컴퓨터에서 실행되었고, 하나의 가상 컴퓨터에서도 실행중인 arbiter이 실행되었습니다. - 두 개의 가상화 된 컴퓨터의 시계가 몇 초 만에 꺼졌습니다 (이 문제를 해결하기 위해 VirtualBox Guest Additions를 설치해야 함). 그러나 큰 금액은 아닙니다. 10gen은 클러스터링에 시간 문제가 있어서는 안된다고 말합니다. 나는 그것을 언급 할 것이라고 생각했다.
내가 32 비트 시스템에서 몽고와 2 기가 제한을 알고, other people 레코드 사라지고 있었다, 나는 기계가 내가 테스트를하고 있어요 알고 있어요 사실은 정확히하지 않습니다에 상위 500 개 (왜 내가 선택한 데이터가 작 았던 지)에 있지만 내 테스트가 작동하면 잘 작동합니다.
아직 몽고가 아직 준비가되지 않았다는 증거가 있습니까? 아니면 본질적으로 잘못된 것을하고 있습니까?
저는 1.6.5를 사용하고 있습니다.
통찰력, 힌트, 팁, 설명, 비평 등 크게 감사드립니다!
ps : 나는 비틀 거리고 있지 않습니다. 좋은 데이터 유형을위한 NoSQL에 대한 아이디어가 정말 좋기 때문에 실제로 작동시키고 싶습니다. 그러나 지금까지는별로 운이 없었습니다!
답장을 보내 주셔서 감사 드리며 일찍 답장을 보내지 않으 셨다가 죄송합니다. 그 다음 휴일이 다가오고 있습니다. 새해에도이 사실을 잘 알고 있습니다. – Rich
안녕하세요, 저는 휴일에 대해 알고 있습니다. 이 테스트가 비교적 간단하다면 다른 사람들이 자신이하는 일을 재현 할 수있게하는 몇 가지 요점을 게시 해 볼 수도 있습니다. 시작 프로세스를 보여주는 스크립트 하나와 업데이트/테스트 사례를 보여주기위한 또 다른 스크립트가 있어야합니다. –