Print
카테고리: [ NoSQL ]
조회수: 39869

나무위키의 덤프파일을 받아온 것을 바탕으로 (https://sarc.io/index.php/nosql/1783-mongodb-mongoexport-mongoimport)
MongoDB와 MySQL의 검색 성능을 비교해보겠습니다
물론 db 간 목적, 사용처가 다르기 때문에 단순 비교는 의미 없습니다!
첫번째 글에서는 데이터 준비 과정을 공유하겠습니다

MongoDB data 살펴보기

> var col_list= db.kimdubi_test.findOne()
> for (var col in col_list) { print (col) ; }
_id  => document id
namespace
title
text  => 주 본문 내용
contributors => jsonArray type

{ "_id" : ObjectId("5dc66d349c8ed369047281ba"), "namespace" : "0", "title" : "%", "text" : " * 상위 문서 : [[특수 문자]]\n[include(틀:다른 뜻1, other1=백분율, rd1=백분율)]\n[목차]\n== 개요 ==\n~~[[야민정음|응]]~~\n\n백분율 기호. 퍼센트 기호라고 하기도 한다.\n\n유니코드는 U+0025이다. ~~하지만 정작 위의 주소창에는 %25라고 쓰여 있다~~[* URL은 [[라틴 문자]], [[숫자]], [[-]], [[_]] 등을 제외한 문자는 이스케이프해야 올바른 주소라는 것을 보장한다. [[URL escape code]] 참조.]어째서인지 [[\\\\]]을 치면 %이 나온다...\n\n[[두벌식]] 키보드 기준으로 Shift + 5로 입력이 가능하다.\n\n전산에서는 [[정수]]의 나머지 연산 기호로 쓰이기도 한다. 13%3이라고 하면 13을 3으로 나눈 나머지인 1을 출력하는 식. \n\n여담이지만 [[던파|모 게임]]에서는 입력할 수 없다. 정확히는 아이템 텍스트로는 가능한데, 유저가 채팅으로 칠 수는 없다.\n== 역사 ==\n이 기호는 '100에 대하여'라는 의미의 이탈리아어 per cento의 축약형인 P cento에서 발전한 것이다.\n[[파일:percent15.png]]\n15세기의 퍼센트 기호.\n[[파일:percent17.png]]\n17세기의 퍼센트 기호.\n[[파일:percent18.png]]\n현재의 퍼센트 기호.\n[[분류:특수 문자]]", "contributors" : [ "Clouds", "derCSyong", "hongdam_", "iron", "kmg2473", "namubot", "R:archevil", "UnofficialNamuImgServer", "115.140.21.108", "122.40.211.23", "124.80.48.180", "175.212.11.46", "203.241.183.10", "211.45.7.254", "218.54.9.80", "222.112.45.157" ] }
> var index=0
>
> db.kimdubi_test2.find().forEach(function(mydoc) {
...   db.kimdubi_test2.update({_id: mydoc._id}, {$set: {num: index }})
...   index++})

MySQL TABLE 생성

 kimdubi_test | CREATE TABLE `kimdubi_test` (
  `_id` varchar(100) DEFAULT NULL,
  `namespace` varchar(100) DEFAULT NULL,
  `title` varchar(100) DEFAULT NULL,
  `_text` text,
  `num` int(11) DEFAULT NULL,
  `contributors` json DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

=> jsonArray 담을 contributors column은 JSON type으로 생성

MongoDB => MySQL data 이관

import pymongo
import pymysql
import json

my_conn=pymysql.connect(host='localhost',port=3310, user='root', password='test123',db='testdb')
mon_connection = pymongo.MongoClient('localhost', 2717)

db=mon_connection.test
col1=db.kimdubi_test

for i in col1.find():
    mongo_json=json.dumps(i['contributors'])
    print(mongo_json)
    with my_conn.cursor() as cursor:
        sql="insert into kimdubi_test (_id, namespace , title , _text ,contributors ,num ) values (%s,%s,%s,%s,%s,%s);"
        cursor.execute(sql,(str(i['_id']),i['namespace'],i['title'],i['text'],mongo_json,i['num']))
    my_conn.commit()

data 확인

> db.kimdubi_test.find({"num":10})
{ "_id" : ObjectId("5dc7f421fc34926d8a1d2046"), "namespace" : "0", "title" : "%", "text" : " * 상위 문서 : [[특수 문자]]\n[include(틀:다른 뜻1, other1=백분율, rd1=백분율)]\n[목차]\n== 개요 ==\n~~[[야민정음|응]]~~\n\n백분율 기호. 퍼센트 기호라고 하기도 한다.\n\n유니코드는 U+0025이다. ~~하지만 정작 위의 주소창에는 %25라고 쓰여 있다~~[* URL은 [[라틴 문자]], [[숫자]], [[-]], [[_]] 등을 제외한 문자는 이스케이프해야 올바른 주소라는 것을 보장한다. [[URL escape code]] 참조.]어째서인지 [[\\\\]]을 치면 %이 나온다...\n\n[[두벌식]] 키보드 기준으로 Shift + 5로 입력이 가능하다.\n\n전산에서는 [[정수]]의 나머지 연산 기호로 쓰이기도 한다. 13%3이라고 하면 13을 3으로 나눈 나머지인 1을 출력하는 식. \n\n여담이지만 [[던파|모 게임]]에서는 입력할 수 없다. 정확히는 아이템 텍스트로는 가능한데, 유저가 채팅으로 칠 수는 없다.\n== 역사 ==\n이 기호는 '100에 대하여'라는 의미의 이탈리아어 per cento의 축약형인 P cento에서 발전한 것이다.\n[[파일:percent15.png]]\n15세기의 퍼센트 기호.\n[[파일:percent17.png]]\n17세기의 퍼센트 기호.\n[[파일:percent18.png]]\n현재의 퍼센트 기호.\n[[분류:특수 문자]]", "contributors" : [ "Clouds", "derCSyong", "hongdam_", "iron", "kmg2473", "namubot", "R:archevil", "UnofficialNamuImgServer", "115.140.21.108", "122.40.211.23", "124.80.48.180", "175.212.11.46", "203.241.183.10", "211.45.7.254", "218.54.9.80", "222.112.45.157" ], "num" : 10 }
mysql> select * from kimdubi_test where num=10\G;
*************************** 1. row ***************************
         _id: 5dc7f421fc34926d8a1d2046
   namespace: 0
       title: %
       _text:  * 상위 문서 : [[특수 문자]]
[include(틀:다른 뜻1, other1=백분율, rd1=백분율)]
[목차]
== 개요 ==
~~[[야민정음|응]]~~

백분율 기호. 퍼센트 기호라고 하기도 한다.

유니코드는 U+0025이다. ~~하지만 정작 위의 주소창에는 %25라고 쓰여 있다~~[* URL은 [[라틴 문자]], [[숫자]], [[-]], [[_]] 등을 제외한 문자는 이스케이프해야 올바른 주소라는 것을 보장한다. [[URL escape code]] 참조.]어째서인지 [[\\]]을 치면 %이 나온다...

[[두벌식]] 키보드 기준으로 Shift + 5로 입력이 가능하다.

전산에서는 [[정수]]의 나머지 연산 기호로 쓰이기도 한다. 13%3이라고 하면 13을 3으로 나눈 나머지인 1을 출력하는 식.

여담이지만 [[던파|모 게임]]에서는 입력할 수 없다. 정확히는 아이템 텍스트로는 가능한데, 유저가 채팅으로 칠 수는 없다.
== 역사 ==
이 기호는 '100에 대하여'라는 의미의 이탈리아어 per cento의 축약형인 P cento에서 발전한 것이다.
[[파일:percent15.png]]
15세기의 퍼센트 기호.
[[파일:percent17.png]]
17세기의 퍼센트 기호.
[[파일:percent18.png]]
현재의 퍼센트 기호.
[[분류:특수 문자]]
         num: 10
contributors: ["Clouds", "derCSyong", "hongdam_", "iron", "kmg2473", "namubot", "R:archevil", "UnofficialNamuImgServer", "115.140.21.108", "122.40.211.23", "124.80.48.180", "175.212.11.46", "203.241.183.10", "211.45.7.254", "218.54.9.80", "222.112.45.157"]
1 row in set (3 min 6.01 sec)

test 데이터 준비 끝