ZeroMQ 가 MySQL 에 원 격 분포 식 작업 처 리 를 제공 하도록 합 니 다.
신분증 검사, 주민등록번호 입력 이 정확 한 지 확인http://netkiller-github-com.iteye.com/blog/1997402
많은 사람들 이 성능 문 제 를 걱정 했 습 니 다. 저 는 나중에 C 로 확장 을 쓰 려 고 했 습 니 다. 그리고 어떤 사람들 은 성능 에 영향 을 미친다 고 말 했 습 니 다. 한 번 도 하지 않 으 면 쉬 지 않 고 아예 mq 에서 원 격 으로 부하 균형 을 통 해 해결 하 겠 습 니 다.
여 기 는 my sql 과 ZeroMQ 가 통신 하 는 플러그 인 만 제 공 했 을 뿐 신분증 검사 프로그램 을 쓰 지 않 았 습 니 다.하지만 MQ 서버 는 많은 언어 로 구현 할 수 있 습 니 다. c, 자바, phop, python, perl, ruby.
다운로드 주소:https://github.com/netkiller/mysql-zmq-plugin
데이터베이스 프로 세 스 간 통신 솔 루 션 MQ
http://netkiller.github.io/journal/mysql.plugin.mq.html
미스터 네 오 첸 (netkiller), 진경 봉 (BG7NYT)
용화 신 구, 선전, 중국 광 둥 성 13113668890+86 755 29812080
<[email protected]>
$Id: mysql-plugin.xml 587 2013-12-16 14:00:00Z netkiller $
판권© 2011, 2012, 2013, 2014 http://netkiller.github.io
$Date: 2013-12-16 13:34:20 +0800 (Thu, 16 May 2013) $
요약
당신 은 데이터베이스 에 있 는 데이터 가 변화 할 때 어떤 조작 을 출발 할 생각 이 있 습 니까?그러나 데이터 가 다른 프로 세 스 와 통신 할 수 없 기 때문에 포기 하고 일정 시간 마다 데이터 변 화 를 조회 하 는 방법 으로 바 꿉 니까?아래 의 플러그 인 은 당신 의 문 제 를 해결 할 수 있 습 니 다.
출처
내 시리즈 문서
http://netkiller.github.io/journal/mysql.plugin.fifo.html
Netkiller 건축 가 의 친필 편지
Netkiller 개발 자 서찰
Netkiller PHP 서찰
Netkiller 파 이 썬 서찰
Netkiller 테스트 서찰
Netkiller Cryptography 서찰
Netkiller Linux 서찰
Netkiller CentOS 서찰
Netkiller FreeBSD 서찰
Netkiller 보안 서찰
Netkiller 버 전 서찰
Netkiller 웹 서찰
Netkiller 모니터링 서찰
Netkiller 스토리 지 서찰
Netkiller 메 일 편지
Netkiller Shell 서찰
Netkiller 네트워크 서찰
Netkiller 데이터베이스 서찰
Netkiller PostgreSQL 서찰
Netkiller MySQL 서찰
Netkiller NoSQL 서찰
Netkiller LDAP 서찰
Netkiller Cisco IOS 서찰
Netkiller H3C 서찰
Netkiller 멀티미디어 서찰
Netkiller Docbook 친필 편지
목차
Netkiller 오픈 소스 소프트웨어 서찰
1. 배경
2. 응용 장면
3. Mysql plugin
4. plugin 의 개발 과 사용
1. 배경
전에 제 가 글 을 발표 한 적 이 있어 요.http://netkiller.github.io/journal/mysql.plugin.fifo.html
이 글 은 fifo 파 이 프 를 통 해 데이터베이스 와 다른 프로 세 스 의 통신 을 실현 하 는 것 을 제시 했다.IPC 메커니즘 (같은 OS / 서버 내) 에 속 합 니 다. 그 후에 저 는 ZeroMQ 를 이용 하여 RPC 메커니즘 을 다시 실현 하 는 방안 이 있 습 니 다. 동시에 IPC (OS / 서버 를 뛰 어 넘 는) 를 호 환 합 니 다.
각종 약어 의 전 칭 IPC (IPC: Inter - Process Communication 프로 세 스 간 통신), ITC (ITC: Inter Thread Communication 스 레 드 간 통신) 와 RPC (RPC: Remote Procedure Calls 원 격 프로 세 스 호출).
지원 프로 토 콜
inproc://my_publisher
tcp://server001:5555
ipc:///tmp/feeds/0
2. 응용 장면
만약 당신 이 데 이 터 를 처리 하고 싶다 면, 여러 가지 이유 로 프로그램 에서 실현 할 수 없다 면, 이 플러그 인 을 사용 할 수 있 습 니 다.데이터베이스 에 있 는 데이터 가 변 했 을 때 어떤 조작 을 시작 하면 이 플러그 인 을 사용 할 수 있 습 니 다.
때때로 당신 의 프로젝트 는 아웃 소 싱 일 수 있 습 니 다. 프로젝트 가 끝 난 후에 아웃 소 싱 측 이 당신 을 상관 하지 않 을 것 입 니 다. 당신 은 기 존 코드 를 바 꿀 수 없 거나 고 칠 수 없습니다.이 플러그 인 을 사용 할 수 있 습 니 다.
MQ 기술 을 사용 하여 데이터 베 이 스 를 아무런 압력 도 받 지 않 고 프로그램 으로 처리 하 는 것 과 다 르 지 않 으 며 코드 를 쓰 는 것 을 줄 였 다.
처리 방법 은 동기 화 또는 비동기 방식 을 사용 할 수 있다.
예. 1. 문 자 를 보내다
문자, 메 일 을 보 내 려 면 해당 휴대 전화 번 호 를 조회 하여 MQ 의 서버 로 보 내 고 서버 에서 휴대 전화 번 호 를 받 은 후 대기 열 에 넣 으 면 다 중 스 레 드 프로그램 이 대기 열 에서 임 무 를 받 아 문 자 를 보 냅 니 다.
select zmq_client('tcp://localhost:5555',mobile) from demo where subscribed='Y' ...;
여러 개의 매개 변 수 를 전달 하고 기호 로 구분 할 수 있 습 니 다.
select zmq_client('tcp://localhost:5555',concat(name,',',mobile,', news')) from demo;
select zmq_client('tcp://localhost:5555',concat(name,'|',mobile,'|news')) from demo;
json 형식
select zmq_client('tcp://localhost:5555',concat('{name:',name,', tel:',mobile,', template:news}')) from demo;
비동기 방식 을 사용 하 는 것 을 권장 합 니 다. MQ 측 에서 임 무 를 받 으 면 바로 '성공' 정 보 를 피드백 합 니 다. 우 리 는 성공 할 수 있 는 지 에 관심 이 없 기 때문에 그 자체 가 맹목적 으로 보 내 는 것 입 니 다. 핸드폰 번 호 를 사용 할 수 있 는 지 알 수 없습니다. 문자 나 메 일의 발송 도 착 률 은 100% 가 아니 기 때문에 대열 에 들 어간 후에 프로그램 이 스스로 처리 하도록 합 니 다.성공 이나 실패 정 보 를 로그 에 기록 하면 됩 니 다.
예. 2. 처리 그림
먼저 처리 해 야 할 그림 을 조회 한 다음, MQ 의 다른 한쪽 에 경로 와 해상 도 를 전달 하 는 처리 프로그램
select zmq_client('tcp://localhost:5555',concat(image,',800x600}')) from demo;
비동기 방식 을 사용 하 는 것 을 권장 합 니 다. MQ 단 은 작업 을 받 으 면 즉시 "성공" 정 보 를 피드백 합 니 다.
예. 3. 주민등록번호 검사
select zmq_client('tcp://localhost:5555',id_number) from demo;
MQ 형 처리 가 지연 되 지 않 기 때문에 동기 화 방안 을 사용 할 수 있 습 니 다. 처리 구 조 를 직접 피드백 할 수 있 습 니 다.
예. 4. 정적 사례
상황 시 뮬 레이 션, 당신 의 프로젝트 는 당신 의 전자상거래 프로젝트 입 니 다. 아웃 소 싱 모델 로 개발 하고 프로젝트 는 이미 개발 되 었 습 니 다.아웃 소 싱 은 더 이상 유 지 를 책임 지지 않 습 니 다. 당신 은 지금 정적 화 를 해 야 합 니 다.이 기능 을 추가 하려 면 상품 표 와 관련 된 여러 곳 의 조작 을 검사 해 야 한다.
코드 를 바 꾸 는 것 보다 프로그램 이 외부 에서 처리 하 는 것 이 더 안전 하 다.우 리 는 동적 URL 다운 로드 를 정적 으로 저장 하 는 프로그램 을 만 들 면 됩 니 다. 데이터 가 변 했 을 때 다시 다운로드 하여 덮어 쓰 면 됩 니 다.
CREATE DEFINER=`dba`@`%` TRIGGER `demo_after_insert` AFTER INSERT ON `demo` FOR EACH ROW BEGIN
select zmq_client('tcp://localhost:5555', NEW.id);
END
CREATE DEFINER=`dba`@`%` TRIGGER `demo_after_update` AFTER UPDATE ON `demo` FOR EACH ROW BEGIN
select zmq_client('tcp://localhost:5555', NEW.id);
END
CREATE DEFINER=`dba`@`%` TRIGGER `demo_after_delete` AFTER DELETE ON `demo` FOR EACH ROW BEGIN
select zmq_client('tcp://localhost:5555', NEW.id);
END
MQ 다른 쪽 서 비 스 는 다운 받 습 니 다.http://www.example.com/goods.php?cid=111&id=100그리고 html 페이지 를 생 성 합 니 다.http://www.example.com/111/100.html
삽입 하면 새 페이지 를 만 들 고 업 데 이 트 는 페이지 를 덮어 쓰 며 삭제 하면 페이지 를 삭제 합 니 다.
이렇게 하면 상품 의 가격, 속성 변화 에 관 계 없 이 정태 화 절 차 는 상응하는 처 리 를 할 것 이다.
예. 5. 데이터 동기 화 사례
저 희 는 여러 개의 데이터 베 이 스 를 가지 고 있 습 니 다. A 라 이브 러 리 안의 데이터 가 변화 한 후에 책 고 를 B 라 이브 러 리 로 동기 화하 거나 결 과 를 처리 하거나 데이터 변환 을 통 해 다른 데이터 베 이 스 를 기록 해 야 합 니 다.
방법 도 트리거 나 이 벤트 를 사용 하 는 거 예요.
3. Mysql plugin
나 는 UDF 몇 개 를 개 발 했 는데, 모두 4 개의 function 이다.
UDF
zmq_client(sockt,message)
sockt. true 를 성공 적 으로 되 돌려 주 었 습 니 다. 실패 하면 flase 를 되 돌려 줍 니 다.
위의 function 이 있 으 면 begin, commt, rollback 에서 직접 삽입 하여 사용 하여 사물 처리 기간 에 당신 이 하고 싶 은 일 을 할 수 있 습 니 다.트리거 와 EVENT 정시 미 션 에 도 사용 할 수 있다.
4. plugin 개발 및 사용
UDF 를 컴 파일 하려 면 아래 패 키 지 를 설치 해 야 합 니 다.
sudo apt-get install pkg-config
sudo apt-get install libmysqlclient-dev
sudo apt-get install gcc gcc-c++ make cmake
5. 플러그 인 사용 방법
udf 를 컴 파일 하고 마지막 으로 so 파일 을 / usr / lib / mysql / plugin / 로 복사 합 니 다.
git clone https://github.com/netkiller/mysql-zmq-plugin.git
cd mysql-zmq-plugin
cmake .
make && make install
싣다
create function zmq_client returns string soname 'libzeromq.so';
create function zmq_publish returns string soname 'libzeromq.so';
마 운 트 해제
drop function zmq_client;
drop function zmq_publish;
설치 성공 확인
mysql> SELECT * FROM `mysql`.`func` where name like 'zmq%';
+-------------+-----+--------------+----------+
| name | ret | dl | type |
+-------------+-----+--------------+----------+
| zmq_client | 0 | libzeromq.so | function |
| zmq_publish | 0 | libzeromq.so | function |
+-------------+-----+--------------+----------+
2 rows in set (0.00 sec)
5. 플러그 인 은 어떻게 사용 합 니까?
플러그 인 은 여러 가지 용법 이 있 는데, 여 기 는 단지 하나의 예 일 뿐이다.
zeromq 서버 테스트 프로그램 컴 파일
cd test
cmake .
make
서비스 프로 세 스 시작
./server
Hello world 보 내기!
mysql> select zmq_client('tcp://localhost:5555','Hello world!');
+---------------------------------------------------+
| zmq_client('tcp://localhost:5555','Hello world!') |
+---------------------------------------------------+
| Hello world! OK |
+---------------------------------------------------+
1 row in set (0.01 sec)
서버 쪽 에서 정 보 를 받 았 는 지 확인 합 니 다.
$ ./server
Received: Hello world!
우 리 는 위의 예 를 트리거 를 사용 하여 더욱 최적화 시 켰 다.
mysql> select zmq_client('tcp://localhost:5555',mobile) from demo;
+-------------------------------------------+
| zmq_client('tcp://localhost:5555',mobile) |
+-------------------------------------------+
| 13113668891 OK |
| 13113668892 OK |
| 13113668893 OK |
| 13322993040 OK |
| 13588997745 OK |
+-------------------------------------------+
5 rows in set (0.03 sec)
서버 쪽 에서 데이터베이스 에서 보 내 온 메 시 지 를 받 았 습 니 다.
$ ./server
Received: Hello world!
Received: 13113668891
Received: 13113668892
Received: 13113668893
Received: 13322993040
Received: 13588997745
우 리 는 json 이나 직렬 화 된 데 이 터 를 조합 하여 원 격 으로 보 낼 수 있다.
mysql> select zmq_client('tcp://localhost:5555',concat('{name:',name,', tel:',mobile,'}')) from demo;
+------------------------------------------------------------------------------+
| zmq_client('tcp://localhost:5555',concat('{name:',name,', tel:',mobile,'}')) |
+------------------------------------------------------------------------------+
| {name:neo, tel:13113668891} OK |
| {name:jam, tel:13113668892} OK |
| {name:leo, tel:13113668893} OK |
| {name:jerry, tel:13322993040} OK |
| {name:tom, tel:13588997745} OK |
+------------------------------------------------------------------------------+
5 rows in set (0.03 sec)
데 이 터 를 되 돌려 주 는 것 은 서버 에서 처리 프로그램 을 어떻게 작성 하 느 냐 에 달 려 있 습 니 다. true / false 등 을 되 돌려 줄 수 있 습 니 다.
트리거 및 트 랜 잭 션 처리, 여 기 는 프 리 젠 테 이 션 하지 않 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL에서 JSON 인덱싱 - aarondfrancis사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 말하지만 완전히 정확하지는 않습니다. MySQL로 JSON 열을 인덱싱하는 것은 완전히 가능합니다! 사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.