Skip to content

Instantly share code, notes, and snippets.

@lega911
Created July 16, 2024 00:10
Show Gist options
  • Save lega911/846d1f4eb839be02c02352c433e27d1e to your computer and use it in GitHub Desktop.
Save lega911/846d1f4eb839be02c02352c433e27d1e to your computer and use it in GitHub Desktop.
MongoDB compression
"""
Results:
orig
write 21.48s (0.215ms)
read x5 24.67s (0.049ms)
size 142.30Mb
ujson + zlib
write 33.79s (0.338ms)
read x5 20.93s (0.042ms)
size 32.89Mb
orjson
write 17.12s (0.171ms)
read x5 10.14s (0.020ms)
size 98.25Mb
orjson + zlib
write 30.40s (0.304ms)
read x5 15.09s (0.030ms)
size 32.89Mb
pickle
write 18.43s (0.184ms)
read x5 8.37s (0.017ms)
size 97.52Mb
pickle + zlib
write 33.99s (0.340ms)
read x5 14.38s (0.029ms)
size 30.09Mb
orjson + zlib, read with no decompression
write 31.58s (0.316ms)
read x5 1.74s (0.003ms)
size 32.89Mb
"""
from pymongo import MongoClient, WriteConcern
import timeit
import datetime
import time
import ujson
import orjson
import zlib
import pickle
COUNT = 100000
db = MongoClient('mongodb://localhost:27017').bench
def log(prefix, t, n=1):
print(f'{prefix} {t:.2f}s ({t/n/COUNT*1000:.3f}ms)')
def log_size():
for _ in range(100):
time.sleep(1)
stats = db.command('collstats', 'test')
if stats['wiredTiger']['cache']['tracked dirty bytes in the cache'] == 0: # cache saved
print(f' size {stats["storageSize"]/2**20:.2f}Mb')
return
raise NotImplementedError
def main():
def write(dump=None):
for _ in range(COUNT - 1):
d = gen_doc()
if dump:
d['data'] = dump(d['data'])
db.test.insert_one(d)
d = gen_doc()
if dump:
d['data'] = dump(d['data'])
db.test.with_options(write_concern=WriteConcern(w=1)).insert_one(d)
def read(load=None):
for d in db.test.find():
if load:
d['data'] = load(d['data'])
def run(name, dump=None, load=None):
db.test.drop()
# to off DB compression
# db.create_collection('test', storageEngine={'wiredTiger':{'configString':'block_compressor=none'}})
time.sleep(1)
print(name)
log(' write', timeit.timeit(lambda: write(dump), number=1))
log(' read x5', timeit.timeit(lambda: read(load), number=5), 5)
log_size()
run('orig')
run('ujson + zlib',
lambda data: zlib.compress(ujson.dumps(data).encode(), level=9),
lambda raw: ujson.loads(zlib.decompress(raw)))
run('orjson',
lambda data: orjson.dumps(data),
lambda raw: orjson.loads(raw))
run('orjson + zlib',
lambda data: zlib.compress(orjson.dumps(data), level=9),
lambda raw: orjson.loads(zlib.decompress(raw)))
run('pickle',
lambda data: pickle.dumps(data),
lambda raw: pickle.loads(raw))
run('pickle + zlib',
lambda data: zlib.compress(pickle.dumps(data), level=9),
lambda raw: pickle.loads(zlib.decompress(raw)))
run('orjson + zlib, read with no decompression',
lambda data: zlib.compress(orjson.dumps(data), level=9),
lambda raw: raw)
def gen_doc():
return {
'sid': 65553,
'pid': 1,
'name': 'Title',
'changed': datetime.datetime(2024, 6, 6, 23, 30, 23, 425000),
'token': [['.sAQAR.XuoQqBq0idgughTfDvrk6obuFVvZsRJvWMKER0EObc4', 'ro']],
'field1': 'default',
'field2': False,
'field3': {},
'field4': True,
'field5': '#default #main #migrate some demo text info some demo text info',
'field6': 9043,
'data': {
'lines': [{'content': 'Donec finibus arcu at sapien laoreet tincidunt.'}, {'content': ''}, {'content': 'Etiam porttitor nisi ac iaculis viverra.', 'link': 65618}, {'content': 'Sed bibendum magna sed posuere euismod.', 'status': 'done'}, {'content': 'In mattis risus ut porta accumsan.', 'status': 'done'}, {'content': 'Phasellus non ex laoreet, molestie arcu vitae, molestie odio.', 'status': 'done'}, {'content': 'Pellentesque fringilla purus eu augue eleifend posuere.', 'status': 'done'}, {'content': 'Nam finibus neque vitae dictum molestie.', 'status': 'done'}, {'content': 'Maecenas elementum nibh vitae blandit auctor.', 'status': 'done'}, {'content': 'Sed tempor mi at quam laoreet porta.', 'status': 'done'}, {'content': 'Morbi vel nulla et velit bibendum pretium.', 'status': 'done', 'children': [{'content': 'Morbi molestie neque sit amet ullamcorper bibendum.'}, {'content': 'Suspendisse eu quam sit amet nisl dictum blandit.'}, {'content': 'Nulla et ex at felis ultricies tristique.', 'status': 'issue'}]}, {'content': 'Maecenas elementum velit nec nisl facilisis, a malesuada sapien ultrices.', 'status': 'done'}, {'content': 'Aenean dignissim diam sed nunc fringilla, in laoreet nisl mollis.', 'status': 'done'}, {'content': 'Cras id risus fringilla, blandit mi at, molestie elit.', 'children': [{'content': 'Sed lacinia elit ut nulla volutpat pretium.', 'status': 'done'}, {'content': 'Cras ut tellus et dui varius mattis et ac metus.', 'status': 'done'}, {'content': 'Nullam faucibus metus lobortis, scelerisque justo id, tempus diam.'}, {'content': 'Praesent sit amet diam non ipsum vulputate hendrerit.', 'status': 'issue'}, {'content': 'Nunc imperdiet libero congue nunc pellentesque vulputate.', 'status': 'done'}, {'content': 'Sed vitae est aliquet, aliquam justo a, molestie lectus.', 'status': 'ready'}]}, {'content': 'Maecenas vitae enim scelerisque, fringilla mi ut, finibus dolor.', 'status': 'ready'}, {'content': 'Phasellus vestibulum eros sit amet dolor varius, nec lacinia massa eleifend.', 'status': 'issue'}, {'content': 'Etiam posuere velit vel orci tempus rutrum quis in sapien.', 'status': 'issue'}, {'content': 'Aenean ultrices tortor gravida leo scelerisque pellentesque.'}, {'content': 'Nullam ac dolor consectetur, semper quam ac, eleifend dolor.', 'status': 'ready'}, {'content': ''}, {'content': 'Pellentesque efficitur turpis at nisl viverra rutrum.', 'status': 'done'}, {'content': 'Donec cursus enim vitae felis convallis varius ut non nisi.', 'status': 'done', 'children': [{'content': 'Nullam id ex ultrices, tincidunt arcu eu, ullamcorper erat.'}]}, {'content': 'Etiam porttitor nisi ac iaculis viverra.', 'status': 'done'}, {'content': 'Proin vel dui eu mi malesuada tempor.', 'status': 'done'}, {'content': 'Quisque ut quam sed justo placerat tempus.', 'status': 'done'}, {'content': 'Maecenas porttitor lacus vel dignissim pharetra.', 'status': 'ready'}, {'content': 'Nunc feugiat libero ut dapibus vehicula.', 'status': 'ready', 'children': True}, {'content': 'Cras vitae dolor vestibulum, porttitor risus sed, consectetur justo.'}, {'content': 'In placerat leo at sodales vehicula.'}, {'content': 'Nunc laoreet turpis at nunc tristique facilisis ut vitae sapien.'}, {'content': 'Fusce a diam et elit ultrices semper et eu dui.'}, {'content': 'Nunc vel purus sed turpis malesuada varius quis sit amet metus.'}, {'content': 'Duis gravida nulla venenatis nibh lobortis, at molestie dolor accumsan.', 'status': 'done'}, {'content': 'Fusce vel ex eget mauris malesuada tincidunt ut vitae mi.'}, {'content': 'Aliquam venenatis purus sed magna tempor, quis aliquam dolor efficitur.'}, {'content': 'Nullam pulvinar lorem ullamcorper orci consectetur auctor.'}, {'content': 'Vestibulum pulvinar justo sit amet massa ullamcorper, sit amet hendrerit dolor luctus.'}, {'content': 'Quisque gravida justo a nunc condimentum pharetra.', 'status': 'done'}, {'content': ''}, {'content': 'Nulla sit amet ex non magna vestibulum molestie non sed eros.', 'status': 'ready', 'children': True}, {'content': 'Fusce euismod nibh sed enim pulvinar, eget luctus lacus gravida.', 'status': 'default'}, {'content': 'Donec a mi eget erat fringilla fringilla.', 'status': 'ready'}, {'content': 'Praesent sodales urna egestas, elementum ante porttitor, commodo nisl.', 'status': 'default'}, {'content': 'Aenean rhoncus odio vitae laoreet hendrerit.'}, {'content': 'Cras id risus fringilla, blandit mi at, molestie elit.'}, {'content': 'Cras vitae dolor vestibulum, porttitor risus sed, consectetur justo.'}, {'content': 'Nunc efficitur neque vel volutpat pretium.'}, {'content': 'Aliquam venenatis purus sed magna tempor, quis aliquam dolor efficitur.'}, {'content': 'Duis ultricies nulla vitae lacus lobortis euismod.'}, {'content': ''}, {'content': 'Curabitur cursus lectus eu ligula rutrum venenatis.', 'status': 'done'}, {'content': 'Fusce rutrum mauris et tellus tincidunt malesuada.'}, {'content': 'Nam sagittis velit eu urna eleifend auctor.'}, {'content': 'Quisque eu nunc varius, faucibus libero ac, scelerisque odio.'}, {'content': 'Curabitur quis lacus id leo mattis ornare.'}, {'content': ''}, {'content': 'Aliquam cursus est et ornare posuere.', 'status': 'done'}, {'content': 'Maecenas facilisis eros sed purus commodo, non consequat lacus elementum.'}, {'content': 'Aliquam eu felis molestie, rhoncus lectus nec, efficitur dui.'}, {'content': 'Fusce rutrum mauris et tellus tincidunt malesuada.'}, {'content': 'Vivamus ac dolor id tellus fermentum tempor.'}, {'content': 'In at est dapibus, volutpat odio ut, convallis lorem.', 'status': 'done'}, {'content': 'Aenean dignissim diam sed nunc fringilla, in laoreet nisl mollis.'}, {'content': 'Aenean imperdiet mauris nec dui congue, vitae tempor dui interdum.', 'status': 'done'}, {'content': 'Phasellus finibus ligula id dolor vulputate, et lobortis neque pulvinar.'}, {'content': ''}, {'content': 'Praesent suscipit turpis eu porta consequat.', 'children': [{'content': 'Curabitur quis lacus id leo mattis ornare.'}, {'content': 'Nunc laoreet turpis at nunc tristique facilisis ut vitae sapien.'}, {'content': 'Quisque vitae elit ac ligula mollis feugiat non eu sapien.'}, {'content': 'Nam eu metus ut quam posuere sagittis vel ac est.', 'status': 'done'}, {'content': 'Sed luctus diam sit amet mi iaculis, vitae mollis metus ornare.'}, {'content': 'Aenean dignissim purus quis turpis tempus euismod.'}, {'content': 'In eget enim ornare, semper mi ac, dignissim sem.'}]}, {'content': ''}, {'content': 'Nunc non dolor ac nunc scelerisque mollis.', 'link': '.sBZ0j.vRtsDEKSkyS1236BpQJEZijU15iKwcCf6PmrFnE_kFQ'}, {'content': 'Curabitur posuere risus eget lacus aliquam dictum.', 'status': 'done'}, {'content': 'Praesent suscipit turpis eu porta consequat.', 'status': 'done'}, {'content': 'Etiam at metus fermentum, sollicitudin sapien et, consectetur est.', 'status': 'done'}, {'content': 'Maecenas facilisis eros sed purus commodo, non consequat lacus elementum.', 'status': 'done', 'children': [{'content': 'Aliquam bibendum mi eu diam malesuada, quis pulvinar velit dapibus.'}]}, {'content': ''}, {'content': 'Integer in dolor quis urna interdum vulputate.', 'link': '.sBZsF.J7lmDk-8iL1_t9PWMaGWqfs3pasdM2zPAluM2hyVQOg'}, {'content': 'Integer fringilla diam varius commodo scelerisque.'}, {'content': 'Vestibulum lobortis augue non odio lacinia, at porta eros mollis.'}, {'content': ''}, {'content': 'Aliquam porttitor ligula ac purus semper, et pretium eros lacinia.', 'status': 'done'}, {'content': 'Sed a neque commodo, luctus nulla in, ultrices sapien.', 'status': 'done'}, {'content': 'Nam sit amet erat bibendum, tristique felis ut, auctor orci.', 'status': 'done'}, {'content': 'Aliquam fermentum lectus vitae dictum aliquet.', 'status': 'done'}, {'content': 'Morbi pulvinar ipsum a ipsum convallis, eu pretium velit tristique.', 'status': 'done'}, {'content': 'Nulla non purus sagittis augue efficitur consectetur.', 'status': 'done'}, {'content': 'Mauris auctor nulla lacinia magna semper, vel varius diam sagittis.', 'status': 'done'}, {'content': 'Morbi eget dolor lacinia, scelerisque nisi sit amet, sollicitudin erat.', 'status': 'issue'}, {'content': 'Pellentesque non augue dapibus, efficitur ligula et, tempor tortor.'}, {'content': ''}, {'content': 'Proin porta quam non massa hendrerit euismod.', 'link': '.sBZr8.FYTrZ4ujhZ0XJatloX50C0x44df1cDKcrkcf46uBJ6U', 'status': 'done'}, {'content': 'Nunc non dolor ac nunc scelerisque mollis.', 'status': 'done'}, {'content': 'Integer nec arcu placerat, venenatis metus ut, luctus tellus.', 'status': 'ready'}, {'content': 'In facilisis tellus quis turpis viverra pellentesque.'}, {'content': 'Maecenas elementum velit nec nisl facilisis, a malesuada sapien ultrices.', 'status': 'done'}, {'content': 'Nunc sed turpis consequat, suscipit nisl ut, ultricies diam.', 'status': 'ready'}, {'content': 'Nulla tempor dolor ac odio vestibulum tincidunt.', 'link': '.sBZsP.DoIGtPqlvfgwxK0oSaQq-g3e76IIDLS_Elbsw4eOjHw'}, {'content': 'Quisque non elit sit amet ligula vehicula auctor at nec eros.', 'link': '.sBZrq.BDgeLnmFkiuCb0M4MibWLa_NV6-V2rE5XGzVPKa6Tfo'}, {'content': 'Sed pretium diam sed diam viverra, et convallis purus sollicitudin.'}, {'content': 'Duis dictum metus id tortor convallis posuere.'}]
}
}
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment