그중 관심있는 Java와 Node에 대해서 남겨둡니다.
나중에 써먹어야지 ㅋㅋ
데이터베이스 위키 – http://ko.wikipedia.org/wiki/데이터베이스
그중 관심있는 Java와 Node에 대해서 남겨둡니다.
나중에 써먹어야지 ㅋㅋ
Redis 카테고리가 추가되었습니다 ^ㅡ^
위키-
레디스(Redis)는 오픈 소스이며 네트워크화, 인메모리 데이터베이스, 선택적 영구성 키-값 데이터 저장소이다. 레디스의 개발은 2013년 5월부터 Pivotal의 지원을 받고 있으며[1], 그 전에는 VMWare의 지원을 받았다.[2][3] DB-Engines.com의 월간 랭킹에 따르면, 레디스는 가장 인기 있는 키-값 저장소이다.[4]
key-value 저장소 !!
내부 구조는 C언어로 되어있고, 메모리상에 데이터를 올려놓고
고속으로 데이터를 I/O 처리할수있습니다.
일반 캐시 서버와다르게 영속성을 가질수있습니다.
이부분이 레디스의 가장 매력적인 부분인것 같네요 ^^
하지만, 장점이 있다면 단점도 있는법..;;;
바로 관리 포인트가 또하나의 핵심인것 같습니다.
RDB,AOF등 설정이나 시스템에 대한 이해 없이 쓰면 낭패를…
차근차근 알아가봅시다.
MongoDB는 기본적으로 127.0.0.1 즉 로컬에서만 접속가능하도록 설정되어 있습니다.
개발하다보면, 다른 서버에서도 MongoDB에 접속해서 데이터 입력, 수정, 삭제, 받아오기 등을 처리해야 하죠.
간단하게 설정할 수 있습니다.
vi로 /etc 아래 있는 mongod.conf 파일을 열어주세요.
vi /etc/mongod.conf
아래와 같이 기본설정은 bind_ip에 로컬이 들어가 있습니다.
bind_ip = 127.0.0.1
이것을 0.0.0.0 으로 변경해주면, 다른 어느 곳에서나 접속이 가능하도록 변경됩니다.
bind_ip = 0.0.0.0
bind_ip = 127.0.0.1, 12x.12x.12x.12x
아이피 주소 사이에 콤마로 구분하시면 됩니다.
위 설정은 로컬과 12x.12x.12x.12x 주소만 허용하는 설정이 되겠죠.
자 원하는 설정을 하셨다면, MongoDB를 재시작 해주시면 되겠죠.
/etc/init.d/mongod restart
node.js 를 이용해서 웹 앱을 제작하는 중(사실 공부중..)인데, DB로 mongoDB를 이용하려고 한다. 둘이 궁합이 잘 맞다나 뭐라나..
mongoDB.org 에 가서 설치 방법을 찾아보니, 아래처럼 잘 나와 있더라. 그냥 따라 하니 설치가 잘 된다.
$ sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv 7F0CEB10
$ echo ‘deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen’ | sudo tee /etc/apt/sources.list.d/mongodb.list
$ sudo apt-get update
$ sudo apt-get install mongodb-org
설치 후, 터미널에서 mongo 를 입력해보면 잘 동작하고 있음을 알 수 있다.
webmaster@server1:~$ mongo
MongoDB shell version: 2.6.4
connecting to: test
>
요즘은 머든 설치는 쉽구나..하는 생각이 든다.
여기에 추가로 node.js 에서 mongDB를 사용하기 위해 모듈을 설치해줘야한다. 물론 이것도 쉽다. npm 을 이용해서 아래처럼 설치할 수 있다.
$ sudo npm install -g mongojs
하나씩 공부해봐야겠다.
[mysql] 쿼리에서 조건문 사용
if 문, case 문, ifnull문
IF 문
형식 : if ( 조건문, 참일때 값, 거짓일때 값)
EX) select member_id, if ( isnull(birthday), ‘-‘, birthday ) from member
설명 – 멤버 테이블에서 아이디(member_id) 와 생일을 뽑는데 null 일경우는 – 를 출력,
아니면 생일을 출력
Case 문
형식 : case (조건 또는 값)
when 값1 then 표시값
when 값2 then 표시값
else 표시값
end
EX) select case a when ‘1’ then a when ‘2’ then b else c end from table_name
설명 – a 값이 ‘1’이면 a, ‘2’ 이면 b, 둘다 아닐경우 c 를 출력
ifnull문 ( mysql 에서 사용 )
형식 : ifnull ( 값1, 값2)
EX ) select ifnull ( price, 0 ) from books
설명 – price 값이 Null 이면 0을, Null 이 아니면 price 값을 출력
isnull문 ( MS-SQL 에서 사용 )
형식 : ifnull ( 값1, 값2)
EX ) select isnull ( price, 0 ) from books
설명 – price 값이 Null 이면 0을, Null 이 아니면 price 값을 출력
NVL문 ( Oracle 에서 사용 )
형식 : NVL ( 값1, 값2)
EX ) select nvl ( price, 0 ) from books
설명 – price 값이 Null 이면 0을, Null 이 아니면 price 값을 출력
몽고 디비 0.5GB 무료 호스팅
몽고 디비 학습중에 좋은 사이트가 있어서 공유 합니다.
바로 mongolab 인데요… 무료로 호스팅도해주고
실험용 또는 스터디용으로는 ^^ 좋은것 같습니다.
용량이 단점이긴한데… 우선은 스터디용으로 사용해봅뉘다
가입도 나름 간편한 편이고. ㅎㅎ 좋습니다.
저는 node – mongodb 연동 실습용으로 ^^ㅎㅎㅎ사용합니다.
On OS X to start/stop/restart MySQL from the command line:
sudo /usr/local/mysql/support-files/mysql.server start
sudo /usr/local/mysql/support-files/mysql.server stop
sudo /usr/local/mysql/support-files/mysql.server restart
To restart, start or stop MySQL server from the command line, type the following at the shell prompt…
/etc/init.d/mysqld start
|
/etc/init.d/mysqld stop
|
/etc/init.d/mysqld restart
|
Some Linux flavours offer the service command too
service mysqld start
|
service mysqld stop
|
service mysqld restart
|
or
service mysql start
|
service mysql stop
|
service mysql restart
|
sudo/usr/local/mysql/support-files/mysql.server start
|
sudo/usr/local/mysql/support-files/mysql.server stop
|
sudo/usr/local/mysql/support-files/mysql.server restart
|
ALTER 문에 대해서 좀 끄적여 놓으려 한다.
우선 ALTER문은 이미 존재하는 테이블의 구조나 형식등을 바꾸기 위해 사용한다.
따라서, 칼럼의 구조나 형식을 변경하기 위해 ALTER명령을 사용하게 된다.
ALTER 명령어는 다음과 같다.
1. 테이블 형식 변경
– Engine 사용 : ALTER TABLE 테이블명 ENGINE=형식;
– type 사용 : ALTER TABLE 테이블명 TYPE=형식;
2. 테이블 이름 변경
– ALTER TABLE 테이블명 RENAME 바꿀이름
– RENAME TABLE 테이블명 TO 바꿀이름
3. 칼럼 추가
– 마지막에 추가 : ALTER TABLE 테이블명 ADD COLUMN 칼럼이름 칼럼타입
– 지정 칼럼 뒤에 : ALTER TABLE 테이블명 ADD COLUMN 칼럼이름 칼럼타입 AFTER 칼럼이름
– 제일 앞에 : ALTER TABLE 테이블명 ADD COLUMN 칼럼이름 칼럼타입 FIRST
4. 칼럼 삭제
– ALTER TABLE 테이블명 DROP COLUMN 칼럼이름
5. 칼럼 변경
– ALTER TABLE 테이블명 MODIFY 컬럼이름 새컬럼타입
– ALTER TABLE 테이블명 CHANGE 컬럼이름 새컬럼이름 새컬럼타입
6. 인덱스에 새항목 추가
– ALTER TABLE 테이블명 ADD INDEX(컬럼이름)
7. 인덱스 삭제
– ALTER TABLE 테이블명 DROP INDEX 컬럼이름
– DROP INDEX 인덱스이름 ON 테이블명
7. 기본키(Primary Key) 지정하기
– ALTER TABLE 테이블명 ADD PRIMARY KEY(칼럼이름) 컬럼이름
mysql> DESCRIBE test;
+——-+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+————-+——+—–+———+——-+
| t1 | varchar(40) | | | | |
| t2 | varchar(40) | YES | | NULL | |
| t3 | varchar(40) | YES | | NULL | |
| t4 | varchar(40) | YES | | NULL | |
+——-+————-+——+—–+———+——-+
4 rows in set (0.00 sec)
mysql> ALTER TABLE test ADD PRIMARY KEY(t1);
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESCRIBE test;
+——-+————-+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+————-+——+—–+———+——-+
| t1 | varchar(40) | | PRI | | |
| t2 | varchar(40) | YES | | NULL | |
| t3 | varchar(40) | YES | | NULL | |
| t4 | varchar(40) | YES | | NULL | |
+——-+————-+——+—–+———+——-+
4 rows in set (0.00 sec)
7. 기본키 삭제
– ALTER TABLE 테이블명 DROP PRIMARY KEY
최근 회사에서 MySQL 버전을 5.5 로 업그레이드하면서 문제되는 쿼리가 있다고 해서 알아본 내용을 적어본다.
MySQL 5.5 로 업그레이드후 기존 쿼리중 서브쿼리에 SQL_NO_CACHE 옵션을 사용한 쿼리에서 문제가 발생했는데 원인은 MySQL 5.5 에서 서브쿼리에 대해 SQL_NO_CACHE 옵션을 사용할수 없게 했기 때문이었다. 이와 비슷하게 UNION 지시어에 대해서도 첫번째 SELECT 에만 지시어 사용이 가능하다.
MySQL 설정의 query_cache_type 의 값에 따라서 쿼리 결과에 대한 캐시 동작이 달라지는데 설정 값은 다음과 같다.(query_cache_type 설정값)
0 -> 쿼리 결과를 캐시하지 않는다.
1 -> SELECT SQL_NO_CACHE 로 시작하는 경우를 제외한 캐시가능한 쿼리 결과를 캐시한다.(기본값)
2 -> SELECT SQL_CACHE 로 시작하는 캐시가능한 쿼리에 대해서만 결과를 캐시한다.
SQL_CACHE, SQL_NO_CACHE 는 쿼리 결과를 다음에 쓸수 있도록 캐쉬할지 여부를 결정한다. SQL_CACHE 는 쿼리의 결과를 캐시에 저장한다. SQL_NO_CACHE 라고 하면 해당 쿼리의 실행결과를 캐쉬에 저장하지 않을뿐 아니라 쿼리의 캐시가 기존에 있었는지도 확인하지 않는다.
(select 쿼리 캐쉬 옵션 문서)
SQL_NO_CACHE 의 제약사항은 서브쿼리에 사용할수 없는것과 UNION 조합의 경우 첫번째에만 사용할수 있다는것이다. (select 문서)
예를 들어 아래와 같은 상황에서 마지막 쿼리는 에러를 발생한다.
create table a( b int );
select * from (select b from a) tmp ; => ok
select * from (select sql_no_cache b from a) tmp; => Last_SQL_Error: Error 'Incorrect usage/placement of 'SQL_NO_CACHE'' on query.
에러가 발생된 이유는 서브쿼리에 SQL_NO_CACHE 를 사용했기 때문인데 이는 MySQL 5.5 이전에는 없던 제약사항이다.
우선 서브쿼리에 SQL_NO_CACHE 를 사용할수 없는것은 애초에 서브쿼리의 결과는 캐시 되지 않기 때문이다.(서브쿼리캐쉬에 대한 답변)
그리고 UNION 조합에서 첫번째에만 사용할수 있는것은 UNION 쿼리에서 캐시는 각각의 SELECT 별로 캐시되는것이 아니라 전체 쿼리를 하나로 판단해서 캐시되기 때문이다.(UNION 옵션 캐시에 대한 답변)
MySQL 5.7 이전버전에서는 SQL_NO_CACHE 옵션을 사용할때 앞에 공백문자가 있어야 된다. 이는 쿼리 파서의 문제라고 하며 공백이 아닌 줄바꿈 같은거 있으면 안된다.
개인적으로 개발할때는 PostgreSQL 만 사용하고 있기 때문에 요즘 MySQL 에는 별로 흥미가 없다. PostgreSQL 에 대한 글들이 유독 많이 보이고 재미있는 것들도 많은것을 보면서 MySQL 을 대체할것이 나온다면 MariaDB 가 아니라 PostgreSQL 이 아닐까 생각해본다. 벤치마크나 장단점에 의한 판단이 아니라 내가 자주 보는 Rails 나 개발 블로그들의 포스팅 비중이 그렇기 때문인데 이쪽 방향으로 따라가는것같다.