±×Áß DB°¡ °¡Àå ºÎÁ·ÇÑ °ú¸ñÀ̰ŵç¿ä. SQL ¾ð¾î°¡ ³Ê¹« ¸ø»ý°Ü¼..
µö·¯´×ÇÏ·Á°í ¿½ÉÈ÷ Å©·Ñ¸µÇÏ°í, DB¿¡ ³Ö°í ÀÌÁ¦ »©³»¼ °¡°øÇؼ Æ®·¹ÀÌ´×½ÃÅ°´Âµ¥
2°¡Áö ¹®Á¦°¡ Á» °É¸®´õ¶ó±¸¿ä. ¾ÆÁÖ ±âÃÊÀûÀΰǵ¥¿ä.
1. MongoDB READ ³Ê¹« ³Ê¹« ´À¸°°Å°°´Ù (»ç½Ç µ¿·®ÀÇ rows¸¦ RDBMS(e.g., mysql)¿¡ ³Ö¾î¼ Å×½ºÆ®Çغ»ÀûÀº ¾øÀ½ ¤» ±×³É ³Ñ´À·Á¼..)
2. Python ¸Þ¸ð¸® ÁøÂ¥ ³Ê¹« ¸¹ÀÌ ¸Ô´Â´Ù.
À§ ¹®Á¦¿¡ ´ëÇÑ Èķα׷¡¸Ó, ¾Æ ¾Æ´Ï ±³ÃÌġŲ üÀÎÁ¡ »çÀå´ÔµéÀÇ Á¶¾ðÀ» ±¸ÇմϤ§r,,
=========================
1. MONGODB READ ISSUE
=========================
SUMMARY
-------------------------
READ´Â ÃÊ´ç 1õ°³¹Ì¸¸, ½ÉÁö¾î 100rows/sec ¹Ì¸¸À϶§µµ..
WRITE´Â ÃÊ´ç 2õ°³ ¾ðÀú¸®.
Çö½Ã´ë DBÀÇ ÇÑ°èÀΰ¡, MongoDB config ¹®Á¦Àΰ¡!
=========================
140¸¸°³Á¤µµ rows À̱¸¿ä. Çϳª´ç int³ª string ªÀº°Åµé·Î ¾Æ¸¶ ÁßøµÈ±¸Á¶ ¸î°³Çؼ ÃÑ attribute°¡ ¾Æ¸¶ 150°³´Â µÉ°Å¿¡¿ä.
140¸¸°³Çؼ ¾Æ¸¶ 4GB¿´³ª... 400MB¿´³ª ±×·¸°Ô ¾öû ¹«°ÌÁø¾Ê¾Ò¾î¿ä.
±×·±µ¥ ÀÌ°É Àüü READÇÏ´Ï±î ¸îºÐÀÌ°É·Á¹ö¸®´õ¶ó±¸¿ä?
pythonÄÚµå·Î matches = [m for m in db.matches.find({})] ÇѰŰŵç¿ä
¹°·Ð indexµµ ¸· ¸î°¡Áö ´õ °É¾îÁÖ°í.. _id´Â ´ç¿¬È÷ ¾ÖÃÊ¿¡ °É·ÁÀÖ±¸..
reindexµµ ÇØÁÖ°íÇߴµ¥..
cursor°¡ batch_size¸¸Å °¡Á®¿À°í ¶Ç ±×´ÙÀ½ skipÇؼ °¡Á®¿À°í ¹¹ ÀÌ·± ´À³¦ÀÇ ¹æ½ÄÀ¸·Î
ÀÛ¾÷À» Çϴµ¥... ÀÌ°Ô index°¡ µÚ·Î°¡¸é °¥¼ö·Ï... Çѹø°¡Á®¿À´Âµ¥ 1s °¡±îÀÌ °É¸®´õ¶ó±¸¿ä?
batch_size¸¦ ´Ã·Á¼ ÇØ°áµÉ¹®Á¦°¡ ¾Æ´Ò°Å°°¾Æ¼..
HDD¿¡´Ù°¡ dataÀ§Ä¡¸¦ µÎ¾ú´Âµ¥¿ä, ÀÛ¾÷°ü¸®ÀÚ(À©µµ¿ìȯ°æÀ̾úÀ½) º¸´Ï±î
ÃÊ´ç 3m/s ¿´³ª Á¤µµ °¡Á®¿À´øµ¥, ÀÌ°Ô SSD·Î ¹Ù²ãµµ Å©°Ô ³ô¾ÆÁöÁø ¾Ê¾Æ¿ä.
ÃÊ´ç 3m/sµµ HDD¹®Á¦°¡¾Æ´Ï°í mongod°¡ ±×·¸°Ô ÀÏÇϴ°Ű°¾Æ¿ä.
WRITEÇÒ¶§´Â ÃÊ´ç 2õ°³Á¤µµ¾¿ Àß ³Ö´õ¶ó±¸¿ä.
Á¦°¡ ±Ã±ÝÇÑ°Ç, ÀÌ°Ô Á¦°¡ DB, ƯÈ÷ MongoDB¸¦ ´Ù·ç´Âµ¥ ¹Ì¼÷Çؼ ±×·± °Ç°¡¿ä? configurationÀ¸·Î ±Øº¹°¡´ÉÇÑ°¡¿ä?
ȤÀº ¿ø·¡ DBÀÚü°¡ WRITE´ÂÃÊ´ç 2õ°³ READ´Â ÃÊ´ç 1õ°³ ¹Ì¸¸¼ÓµµÀÎ°Ô Á¤»óÀΰǰ¡¿ä?
=========================
2. python memory
=========================
SUMMARY
-------------------------
python variables' metadata are too much ½Ã¹Ù ¤© Åõ¸ÓÄ¡Åõ¸ÓÄ¡
4GB -> 12GB°¡ µÇ´Â MAGIC. (MongoDB¼ loadÇÑ data)
lazy load ¹æ½Ä¸»°í.. ´Ù¸¥ ¹æ¾ÈÀÖ³ª?
Ȥ ´Ü¼ø pythonÀÇ ÇÑ°èÀΰ¡..
=========================
pythonÀº ¸ðµç°Ô °´Ã¼´Ùº¸´Ï±î ´Ü¼øÈ÷ int°°Àº°Å³ª listÀúÀåÇصµ metadata°¡ ÀÖÀݾƿä?
±Ùµ¥ ÀÌ°Ô ¾¾-¹ß mongodb¿¡¼ find·Î ´ÙÀоî¿À´Ï±î
elementÇϳªÇϳª¿¡.. attribute¶ó°íÇؾßÇϳª, documentationÀÇ ¸ðµç attr¿¡ ÇϳªÇϳª¿¡
meta data°¡ ÀÖ¾î¼.. ¾¾¹ß ¿ë·®ÀÌ.. 4GB (Ȥ 400mb) Á¤µµ ÇÏ´ø°Ô 12GB±îÁö »½Æ¢±â µÇ´õ¶ó±¸¿ä?
sys.getsizeof ¸¦ ½á¼ ±¸Çß´ø°Çµ¥¿ä,
arr = [x for x in db.data.find({})]
sys.getsizeof(arr)
ÀÌÁö¶öÇصµ¾È³ª¿À°í
sys.getsizeof(arr) + sys.getsizeof(arr[0]) + sys.getsizeof(arr[0]['attr1'])
ÀÌ·±½ÄÀ¸·Î ´Ù µÚÁ®¼ ÇØÁà¾ßÇÔ¿ä.. ±×·¡¾ßÁö ½ÇÁ¦ python process°¡ Á¡À¯ÇÏ°íÀÖ´Â memoryÇÏ°í °°Àº ¼öÄ¡°¡ ³ª¿À´õ¶ó±¸¿ä
À̰ź¸°í µç »ý°¢ÀÌ
¾Æ¾¾¹ß ÁøÂ¥ ÆÄÀ̽㠰³ Á¿°°Àº»õ³¢¶ó´Â ¸»ÀÌ Æ¢¾î³ª¿À´õ¶ó±¸¿ä
Javaó·³ ¿ø½ÃÇüÀÖ¾úÀ½ÁÁ°Ù´Ù´Â »ý°¢µµ µé°í.
±×·¡¼ Àú´Â Àú¸¸ÀÇ workaround·Î
ÀÏ´Ü metadata¾øÀ»¼öÀÖµµ·Ï ´Ù½Ã pre process Çؼ Á» °¡º±°Ô ¿Å°Ü³ù¾î¿ä
¿©±â¼ ±Ã±ÝÇÑ°Ô,
python¸¸ ÀÌ·±°Ç°¡¿ä? ´Ù¸¥¾ð¾îÇҽð£ÀÌ ¾ø³×¿ä (±ºÀÎÀ̶ó ¤Ð¤Ð)
pythonÀ¸·Î ÀÌ·± Å« µ¥ÀÌÅÍ ´Ù·ç½Ã´ÂºÐµéÀº ¸Þ¸ð¸®°ü¸®¾î¶»°ÔÇϽóª¿ä?
±×¶§±×¶§ ÇÊ¿äÇÑ batch¸¸ db¿¡¼ ±Ü¾î¿Í¼ Çϱ⿡´Â ¾ÖÃÊ¿¡ ±×°Ô ±×½Ã°£À̶ó¼.
ÇÊ¿äÇÒ¶§ ±Ü¾î¿À°í ±Û°Ï¿Â°Ç cacheÇÏ´Â ½º¸¶Æ®ÇÑ cursor°¡ Áö¿øµÇ¸é ÁÁ°ÚÁö¸¸ ±×·¸Áø¾Ê³ªº¸´õ¶ó±¸¿ä. mongod ÀÚüÀÇ LRU ij½Ã¹Û¿¡¾÷½¼µí
Àú¿¡°Ô Á¶¾ðÇØÁÖ½Ç ÆÁ°°Àº°Å ÀÖÀ¸½Å°¡¿ä .. ÆÄÀ̽ã¹ö¸±±î¿ä µö·¯´×Àº¿Ö ´Ù ÆÄÀ̽㿡¼ÇÏ´Â°Å¾ß Á¤¸»..
±ä±ÛÀоîÁּż°¨»çÇÕ´Ï´Ù. ºÎÁ·ÇÑ È¯°æ¼Ó¿¡¼µµ ÃÖ¼±À»´ÙÇØ °øºÎÇÏ°í ÀÖÀ¸´Ï °¡¿²°ÔºÁÁּż ÁÁÀº ´äº¯ ºÎŹµå¸®°ÙÀ¾´Ï´Ù ²Ù-¹÷
Àâ´ã | 1694¸íÀÌ Àоú¾î¿ä. 3.16.255.189