Статьи

SpiderMonkey для V8 для MongoDB и монгометр

Когда 10gen переключил стандартный движок JavaScript для MongoDB 2.3 / 2.4 по умолчанию со SpiderMonkey на V8, я подумал, что воспользуюсь возможностью сравнить относительные характеристики релизов с помощью монгометра . Будучи сотрудником службы безопасности, я действительно должен был сначала рассмотреть дополнительные функции аутентификации … Эй, хо.

Я задокументирую шаги, предпринятые во время сравнения, в том числе настройку, чтобы это можно было повторить и проверить — на случай, если кому-то будет интересно — но в основном, чтобы я мог напомнить себе о том, что я сделал; память, сито.

Настройка

Я собираюсь установить 2.2.2 и 2.3.2 параллельно на выделенную машину. Затем я буду использовать последнюю версию драйвера Java с mongometer.

1
2
$ wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.3.2.tgz
$ wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.3.2.tgz.md5

Я получил 403 ответа на этот запрос …

1
2
3
4
5
$ wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.2.2.tgz
$ wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.2.2.tgz.md5
 
$ md5sum -c mongodb-linux-x86_64-2.2.2.tgz.md5
md5sum: mongodb-linux-x86_64-2.2.2.tgz.md5: no properly formatted MD5 checksum lines found

Хмм. Предполагается, что файл md5 будет контрольной суммой (затем x2 пробелами), а затем именем файла контрольной суммы файла. Вместо этого мне придётся взглянуть на них, ну, на глаз, тот, который я мог бы скачать…

1
2
3
4
$ md5sum mongodb-linux-x86_64-2.2.2.tgz
be0f5969b0ca23a0a383e4ca2ce50a39 mongodb-linux-x86_64-2.2.2.tgz
$ cat mongodb-linux-x86_64-2.2.2.tgz.md5
be0f5969b0ca23a0a383e4ca2ce50a39

Настройка

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
$ tar -zxvf ~/mongodb-linux-x86_64-2.2.2.tgz
$ sudo mkdir -p /usr/lib/mongodb/2.2.2
$ sudo mv mongodb-linux-x86_64-2.2.2/* /usr/lib/mongodb/2.2.2/
$ rm -r mongodb-linux-x86_64-2.2.2
$ sudo mkdir -p /data/db/2.2.2
$ sudo chown `id -un` /data/db/2.2.2
$ /usr/lib/mongodb/2.2.2/bin/mongod --port 27000 --dbpath /data/db/2.2.2 --logpath /data/db/2.2.2/mongod.log
 
$ tar -zxvf ~/mongodb-linux-x86_64-2.3.2.tgz
$ sudo mkdir -p /usr/lib/mongodb/2.3.2
$ sudo mv mongodb-linux-x86_64-2.3.2/* /usr/lib/mongodb/2.3.2/
$ rm -r mongodb-linux-x86_64-2.3.2
$ sudo mkdir -p /data/db/2.3.2
$ sudo chown `id -un` /data/db/2.3.2
$ /usr/lib/mongodb/2.3.2/bin/mongod --port 27001 --dbpath /data/db/2.3.2 --logpath /data/db/2.3.2/mongod.log

Давайте проверим, что они работают.

1
2
3
$ ps -ef | grep mongod
1795 /usr/lib/mongodb/2.2.2/bin/mongod --port 27000 --dbpath /data/db/2.2.2 --logpath /data/db/2.2.2/mongod.log
2059 /usr/lib/mongodb/2.3.2/bin/mongod --port 27001 --dbpath /data/db/2.3.2 --logpath /data/db/2.3.2/mongod.log

Теперь давайте убьем одного (изящно) и перейдем к интересным вещам.

1
2
3
$ sudo kill -15 2059
$ ps -ef | grep mongod
1795 /usr/lib/mongodb/2.2.2/bin/mongod --port 27000 --dbpath /data/db/2.2.2 --logpath /data/db/2.2.2/mongod.log

Теперь я прыгаю на другую коробку.

1
2
3
4
$ wget https://github.com/downloads/mongodb/mongo-java-driver/mongo-2.10.1.jar
$ cp mongo-2.10.1.jar /usr/lib/jmeter/2.8/lib/ext
$ cp ~/IdeaProjects/mongometer/out/artifacts/mongometer_jar/mongometer.jar /usr/lib/jmeter/2.8/lib/ext
$ /usr/lib/jmeter/2.8/bin/jmeter.sh

Тесты

Тесты действительно довольно простые; Я выполню вставку в две разные базы данных и выполню поиск по этим базам данных.

Версия 2.2.2

1
2
show dbs
local 0.078125GB

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
> show dbs
jmeter 0.203125GB
jmeter2 0.203125GB
local 0.078125GB
 
> use jmeter
> db.jmeter.find().count()
1000
> db.dropDatabase()
 
> use jmeter2
> db.jmeter.find().count()
1000
> db.dropDatabase()
 
$ ps -ef | grep mongo
2690 /usr/lib/mongodb/2.2.2/bin/mongod --port 27000 --dbpath /data/db/2.2.2 --logpath /data/db/2.2.2/mongod.log
 
$ sudo kill -15 2690
$ ps -ef | grep mongo

Ничего. Давайте запустим экземпляр 2.3.2.

1
2
3
$ /usr/lib/mongodb/2.3.2/bin/mongod --port 27001 --dbpath /data/db/2.3.2 --logpath /data/db/2.3.2/mongod.log
 
$ ps -ef | grep mongo 2947 /usr/lib/mongodb/2.3.2/bin/mongod --port 27001 --dbpath /data/db/2.3.2 --logpath /data/db/2.3.2/mongod.log

Версия 2.3.2

1
2
> show dbs
local 0.078125GB

01
02
03
04
05
06
07
08
09
10
11
12
13
14
> show dbs
jmeter 0.203125GB
jmeter2 0.203125GB
local 0.078125GB
 
> use jmeter
> db.jmeter.find().count()
1000
> db.dropDatabase()
 
> use jmeter2
> db.jmeter.find().count()
1000
> db.dropDatabase()

Выводы

Я думаю, вы должны нарисовать свой собственный. Я запускал эту программу пару раз и собираюсь написать сценарий, чтобы очистить среду перед каждым запуском, возможно, я мог бы добавить и более сложные запросы. Может быть, если я найду время на следующих выходных, я найду.

Ссылка: SpiderMonkey на V8 для MongoDB и mongometer от нашего партнера JCG Яна Эттлса в блоге об исключительных исключениях .