2011-12-07 5 views
6

파이썬에서 유닉스 소켓을 통해 mongodb에 연결할 수있는 방법이 있습니까? 공식 pymongo 모듈은 아직 유닉스 소켓을 지원하지 않습니다.파이썬에서 유닉스 소켓을 통해 mongodb에 연결하는 방법

검색 및 검색을 수행하는 동안 제 3 자 대안이나 패치를 원합니다.

mongodb => python dicts가 자연스럽고 사용하기 쉽기 때문에 ORM 스타일 라이브러리가 마음에 들지 않으므로 MongoEngine과 같은 것을 고려하지 않았습니다.

답변

7

MongoDB를 기본적으로, /tmp/mongodb-27017.sock에서 유닉스 소켓을 작성합니다.

from pymongo import MongoClient 
CONNECTION = MongoClient('/tmp/mongodb-27017.sock') 

은 또한 당신이 --nounixsocket으로 mongod를 시작하여이 동작을 비활성화하거나 항상 생성하고 UNIX 수신합니다 --unixSocketPrefix <path>

MongoDB를 가진 다른 위치를 지정할 수 있습니다 pymongo 2.4의로서 당신은 이런 연결을 만들 수 있습니다 소켓이 아닌 경우 --nounixsocket이 설정되어 있지 않은 경우 --bind_ip이 설정되어 있지 않거나 --bind_ip127.0.0.1으로 지정되어 있지 않은 경우 MongoDB를의 V3.0의에 대한

+0

그래서 이것은 pymongo 2.4 이후로 마침내 구현되었습니다. 고맙습니다! –

+0

"pymongo 2.4 현재로"라고 말하십시오. pymongo가 유닉스 소켓을 만드는 것입니까? 아니면 "... 양말"입니다 pymongo 2.4부터 연결을 할 수 있습니다 ... " –

+0

명료성을 위해 편집, 감사합니다. –

1

파이썬의 범위 밖에서 TCP/IP 소켓과 유닉스 도메인 소켓 사이에 프록시를 만들 수 있습니다. 그래서, 당신은 여전히 ​​pymongo를 사용할 수 있습니다

netcat 또는 socat 중 하나를 할 수 있습니다.

nc -l 1234 | nc -U /tmp/foo 

또는

socat TCP-LISTEN:1234,reuseaddr,fork UNIX-CLIENT:/tmp/foo 

은 참조 :

Redirecting TCP-traffic to a UNIX domain socket under Linux

+1

어쨌든 감사합니다, 그러나 이것은 내가 성능과 안정성을 위해 유닉스 소켓을 사용하려면 : 원하는 것을 정확히 아니지만, TCP의 프록시와 두 개의 목표가 모두 누락 된 쿼리를 전달합니다. –

6

업데이트

당신이 리눅스에서 MongoDB를 3.x를 업그레이드 할 경우

, 그룹 및 /tmp/mongodb-27017.sock 다른 권한이 제거되었습니다. MongoClient (host = '/ tmp/mongodb-27017.sock')를 사용하여 연결할 때 오류가 거부되었습니다.

이 문제를 해결하려면 MongoDB 구성 파일을 filePermissions 옵션을 포함하는 YAML 형식으로 업그레이드하십시오. 권한 다시. YAML 형식으로

예 /etc/mongod.conf : 내가 만든다면

storage: 
    dbPath: "/var/lib/mongodb" 
systemLog: 
    destination: file 
    path: "/var/log/mongodb/mongod.log" 
    logAppend: true 
net: 
    unixDomainSocket: 
     filePermissions: 0777 
관련 문제