Programming/node.js2015. 12. 8. 21:33

https://github.com/felixge/node-mysql


Mysql 모듈 보면 CreatePool 후 Query 방식이 두가지가 있다.


Pooling connections

1번안

var mysql = require('mysql');
var pool  = mysql.createPool({
  connectionLimit : 10,
  host            : 'example.org',
  user            : 'bob',
  password        : 'secret'
});

pool.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
  if (err) throw err;

  console.log('The solution is: ', rows[0].solution);
});

2번안

var mysql = require('mysql');
var pool  = mysql.createPool(...);

pool.getConnection(function(err, connection) {
  // Use the connection
  connection.query( 'SELECT something FROM sometable', function(err, rows) {
    // And done with the connection.
    connection.release();

    // Don't use the connection here, it has been returned to the pool.
  });
});


차이점을 2번의 경우에는 커넥션을 하나 지정해서 해당 커넥션으로해서 쿼리를 처리하고 마지막에 해당 커넥션을 다사용했다고

반환해주는 방식이다.


단순히 일반 SELECT 쿼리 위주의 API 개발일 경우 1번안이 편할 수 있지만 트랜젹센처리나 INSERT 후 Last Insert Id 값을 가져오거나 Found_rows 같은 처리된 Row의 정보를 가져와야 할때는 2번안으로해서 같은 커넥션으로 처리 되어야지만 제대로 된 값을 가져 올 수 있다.


그리고 2번안의 경우 사용 후에 connection.release 해주지 않을 경우 반환하지 않아서 connection limit가 걸릴 수 있다. 

Posted by 시니^^
DB/NoSQL/Mysql2014. 9. 4. 11:23


※  DISTINCT 와 GROUP BY 의 경우 처리방식은 비슷하지만 사용하는 성향에 따라서 조금씩 이용하는 곳이 다르다.

     그리고 가장 큰 차이는 GROUP BY 의 경우 정렬이 일어나는 것이다.

     아래의 예시를 보면 file sort가 일어나는 것을 볼 수 있다.


CREATE TABLE `asd` (
  `idx` int(11) NOT NULL AUTO_INCREMENT,
  `id` varchar(20) NOT NULL DEFAULT '',
  `data` varchar(20) NOT NULL DEFAULT '',
  PRIMARY KEY (`idx`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into asd (id,data)values('a',100);
insert into asd (id,data)values('a',100);
insert into asd (id,data)values('c',100);
insert into asd (id,data)values('d',100);
insert into asd (id,data)values('c',100);
insert into asd (id,data)values('c',100);
insert into asd (id,data)values('d',100);
insert into asd (id,data)values('d',100);


※ id 컬럼에 index가 걸려있다면 filesort가 나지 않지만 걸려 있지 않다면 아래와 같이 filesort가 일어난다.

   해당 쿼리가 비번하게 일어난다면 filesort의 경우 성능에 큰 차이를 보일 수 있다. 

   그래서 정렬이 필요하지 않을 경우에는 order by null를 입력해서 filesort를 막을 수있다.


mysql> explain select * from asd group by id;
+----+-------------+-------+------+---------------+------+---------+------+------+---------------------------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra                           |
+----+-------------+-------+------+---------------+------+---------+------+------+---------------------------------+
|  1 | SIMPLE      | asd   | ALL  | NULL          | NULL | NULL    | NULL |    8 | Using temporary; Using filesort |
+----+-------------+-------+------+---------------+------+---------+------+------+---------------------------------+
1 row in set (0.00 sec)
mysql> explain select * from asd group by id order by null;
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra           |
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------+
|  1 | SIMPLE      | asd   | ALL  | NULL          | NULL | NULL    | NULL |    8 | Using temporary |
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------+
1 row in set (0.00 sec)


※ 해당 내용은 아래 블로그를 참조 하였으며 자세한 내용은 아래 블로그에서 설명을 볼 수 있습니다.

DISTINCT 와 GROUP BY의 차이 - http://intomysql.blogspot.kr/2011/01/distinct-group-by.html

GROUP BY의 Filesort 작업 제거 - http://intomysql.blogspot.kr/2010/12/group-by-filesort.html



Posted by 시니^^
DB/NoSQL/Mysql2014. 4. 18. 21:00


1. MySQL Handlersocket 관련 한글번역 잘해놓은 사이트 

http://advent.perl.kr/2012/2012-12-12.html 


※ What is Hanldersocket?


※ Common architecture pattern for MySQL + memcached




2. 개발자 원문 사이트

http://yoshinorimatsunobu.blogspot.kr/search/label/handlersocket


3. 참고사이트 성능비교
http://philipzhong.blogspot.kr/2011/06/performance-test-for-mysql-sql-and.html 


Posted by 시니^^
DB/NoSQL/Mysql2013. 2. 22. 00:41

MySQL 5.6.10  (2013-02-05)


http://dev.mysql.com/doc/relnotes/mysql/5.6/en/


http://dev.mysql.com/tech-resources/articles/mysql-5.6.html


DBA and Developer Guide to MySQL 5.6

Building the Next Generation of Web Applications and Services

At a glance, MySQL 5.6 is simply a better MySQL with improvements that enhance every functional area of the database kernel, including:

  • Better Performance and Scalability
    • Improved InnoDB storage engine for better transactional throughput
    • Improved Optimizer for better query execution times and diagnostics
  • Better Application Availability with Online DDL/Schema changes
  • Better Developer Agility with NoSQL Access with Memcached API to InnoDB
  • Improved Replication for high performance, self-healing distributed deployments
  • Improved Performance Schema for better instrumentation
  • Improved Security for worry-free application deployments
  • And other Important Enhancements

This article serves as a DBA and Developer guide to MySQL 5.6 as it highlights the key new features in each of these areas, many with practical use case examples.

Mysql들어갔더니 5.6으로 릴리즈되어있네요;;


Mysql5.6.7 (2012-09-29, Release Candidate)


작년 9월에 RC버전까지 확인 하고 언제 되는가 기다리고 있었는데... ㅡㅡㅋ


2월 5일에 되었군요 흠흠........


요즘에 SphinxQL이랑 SphinxSE 테스트도 해봐야되는데....


이것도 체크해야겠군요 흠흠


암튼 자세한 내용은 다음에~~

Posted by 시니^^