/pgeast11

Postgres Conference Talk

Primary LanguagePythonMIT LicenseMIT

PostGres

-----

Main points: working set, indexing, infrastructure

-----

Me: KS, CTO, early-adopter.  Mongo by fire.  Python preso.
    %% emacs buffers > context switching
Agenda: GC, me, arch, mongo, terminal.
    %% live code, look, no net!  I'll write javascript before your eyes!
GC: 9p, 2y, i->o. MLB.com nerds, jobs@gc.io.  seriously.
Me: Langs, learning, history.  hacker->nuanced/manager hacker.  DisMath=runtimes, algs, structs!!!
Mongo: GC=(data + media), JSON, Mongo, completely insane.
    %% 10gen remains 1 feature release ahead.  Barely (sharding).
    %% urban dictionary
Arch: API, JSON, LAMP->LNMP?

Yay:

team = {"name": "NYC Jaguars", "sport": "baseball"}
mongo.datadb.team.save(team) # omg wow

Next: 1 year in 30 min.  Working sets.  Scaling in place.

nohup mongod --port 30000 --dbpath /data/0/ --replSet node1 --logpath ~/mongo.0.log --logappend 2>&1>> mongo.0.log &
killall -2 mongod

nohup mongod --port 30000 --dbpath /data/0/ --replSet node1 --logpath ~/mongo.0.log --logappend 2>&1>> mongo.0.log &
mongo localhost:30000
> show dbs
> db.stats()
> use data
> db.thingoes.save({a: 1, b: 2, x: true})
> db.thingoes.find()
> db.thingoes.stats()

nohup mongod --port 30001 --dbpath /data/1/ --replSet node1 --logpath ~/mongo.1.log --logappend 2>&1>> mongo.1.log &
nohup mongod --port 30002 --dbpath /data/2/ --replSet node1 --logpath ~/mongo.2.log --logappend 2>&1>> mongo.2.log &

mongo localhost:30000
> rs.initiate()
> rs.add("localhost:30001")
> rs.addArb("localhost:30002")
> use data
> db.thingoes.save({a: 7, x: true})
> db.thingoes.find()
> db.thingoes.stats()

mongo localhost:30001
> show dbs
> use data
> show collections
> db.getMongo().setSlaveOk()
> db.thingoes.find()
> db.thingoes.save({a: 5, x: false})

mongo localhost:30000
> rs.status()
> rs.stepDown()

mongo localhost:30001/data
> for ( var i = 0; i < 100000; i++ ) { db.thingoes.save({a: i, x: (i%11==0)}); }
> ""
> ""
> db.currentOp()
> db.thingoes.ensureIndex({x: 1}, {background: true, sparse: true})
> for ...
> db.thingoes.ensureIndex({a: 1})

nohup mongod --configsvr --logpath ~/mongo.config.log --logappend --cpu 2>&1>> ~/mongo.config.log &
nohup mongod --port 40000 --logpath ~/mongos.log --configdb AirKiril.local:27019 2>&1>> ~/mongos.log &

mongo localhost:40000/admin
> use admin
> db.runCommand({addshard: 'node1/AirKiril.local:30000'})
> db.printShardingStatus()
> show dbs
> use data
> show collections
> db.thingoes.count()

nohup mongod --port 30003 --dbpath /data/3/ --replSet node2 --logpath ~/mongo.3.log --logappend 2>&1>> mongo.3.log &

mongo localhost:40000/admin
> db.runCommand({addshard: 'node2/AirKiril.local:30003'})

mongo localhost:30003
> rs.initiate()
> rs.status()

mongo localhost:40000/admin
> db.runCommand({addshard: 'node2/AirKiril.local:30003'})
> db.printShardingStatus()
> db.runCommand({enablesharding: 'data'})
> db.printShardingStatus()
> db.runCommand({shardcollection: 'data.thingoes', key: {a: 1}})
> db.printShardingStatus()

mongo localhost:30001/data
> db.thingoes.count()

mongo localhost:30003/data
> db.thingoes.count()

mongo localhost:40000/admin
> db.printShardingStatus()
> db.runCommand({moveChunk: 'data.thingoes', find: {a: 1}, to: 'node2'})
> db.printShardingStatus()

mongo localhost:30001/data
> db.thingoes.count()

mongo localhost:30003/data
> db.thingoes.count()

mongo localhost:40000/data
> db.thingoes.save({x: true})
> db.thingoes.save({x: true, a: 777777})

nohup mongod --port 30004 --dbpath /data/4/ --replSet node2 --logpath ~/mongo.4.log --logappend --cpu 2>&1>> mongo.4.log &
nohup mongod --port 30005 --dbpath /data/5/ --replSet node2 --logpath ~/mongo.5.log --logappend --cpu 2>&1>> mongo.5.log &

mongo localhost:30003
> rs.add('AirKiril.local:30004')
> rs.addArb('AirKiril.local:30005')
> rs.status()
> rs.stepDown()