2011-03-06 3 views
5

웹 응용 프로그램의 각 요청에 (거의)로드되는 작은 데이터 청크의 SQL 종속성을 제거하고 싶습니다. 대부분의 데이터는 키 - 값/문서 구조이지만 관계형 솔루션은 제외되지 않습니다. 데이터가 너무 크지 않기 때문에 가용성을 높이기 위해 메모리에 보관하고 싶습니다.메모리 내 데이터베이스에 대한 권장 사항

어떤 솔루션을 추천 해 주시겠습니까?

+0

사용중인 웹 스택을 공유 할 수 있습니까? LAMP 또는 .NET 또는? – DuckMaestro

답변

6

가장 간단하고 널리 사용되는 메모리 키 저장소는 MemcacheD입니다.

Memcached가가 데이터베이스 호출, API 호출 또는 페이지의 결과에서 임의의 데이터의 작은 덩어리 (문자열, 객체)에 대한 메모리 키 - 값 저장소입니다 : 당신이 무엇을 요구 소개 페이지 다시 반복 표현.

클라이언트 목록이 인상적입니다. 오랜 시간 동안 해왔다. 좋은 문서. 거의 모든 프로그래밍 언어에 대한 API를 가지고 있습니다. 수평 확장은 매우 간단합니다. 내 경험으로 Memcached는 좋습니다.

MemBase을 살펴볼 수도 있습니다.

1

나는 이것이 당신이 찾고있는 것이 확실치 않지만 캐싱 프레임 워크 (지금 사용하고있는 도구에 포함될 수있는 것)를 조사해야합니다. 저장소 패턴을 사용하여 데이터를 요청하면 키로 캐시에 있는지 여부를 확인할 수 있습니다. 그렇지 않으면 캐시에서 데이터베이스를 가져옵니다. 캐시에서 캐시를 가져옵니다.

처리 할 데이터의 종류에 따라 달라 지므로 캐시에 데이터를 보관하는 기간은 사용자가 결정해야합니다. 아마도 키가 계속 요청되는 동안 데이터를 보관할 것이므로 슬라이딩 타임 아웃이 가장 좋습니다. 즉, 캐시에 사용자에 대한 데이터가있는 경우 사용자가 사라지면 데이터가 캐시에서 만료됩니다.

6

Redis은 이러한 종류의 데이터에 적합합니다. 또한 몇 가지 기본 데이터 구조를 지원하고 이에 대한 작업을 제공합니다.

최근 내 장고 포럼 앱을 실시간/트래킹 데이터로 사용하도록 전환했습니다. 이런 종류의 작업을 수행 할 때 더 이상 기분이 상할 수 없으므로 좋습니다 (SET views = views + 1 및 모든 페이지에 다른 글을 씁니다. 보기).

def seen_user(user, doing, item=None): 
    """ 
    Stores what a User was doing when they were last seen and updates 
    their last seen time in the active users sorted set. 
    """ 
    last_seen = int(time.mktime(datetime.datetime.now().timetuple())) 
    redis.zadd(ACTIVE_USERS, user.pk, last_seen) 
    redis.setnx(USER_USERNAME % user.pk, user.username) 
    redis.set(USER_LAST_SEEN % user.pk, last_seen) 
    if item: 
     doing = '%s <a href="%s">%s</a>' % (
      doing, item.get_absolute_url(), escape(str(item))) 
    redis.set(USER_DOING % user.pk, doing) 
3

당신은 SQL을 신경 쓰지 않는 경우 : 여기

파이썬으로, 최신 마지막으로 본 사용자의 정렬 된 집합을 유지를 포함하여 사용자 활동 추적에 필요한 데이터를 저장하기 위해 레디 스를 사용하는 예입니다 하지만 db를 메모리에 유지하려면 sqlite를 체크 아웃해야 할 수도 있습니다 ( http://www.sqlite.org/inmemorydb.html 참조).

sql을 원하지 않고 실제로 키 - 값 쌍만있는 경우 맵/해시/연관 배열에 저장하고 완료해야하는 이유는 무엇입니까?

2

결국 메모리 내 데이터베이스가 필요하면 H2은 매우 좋은 옵션입니다.

2

고려할 데이터베이스가 한 개 더 있습니다. Berkeley DB. Berkeley DB를 사용하면 데이터베이스를 메모리 내, 디스크 상 또는 둘 다로 구성 할 수 있습니다. 키 - 값 (NoSQL)과 SQL API를 모두 지원합니다. Berkeley DB는 웹 응용 프로그램과 함께 사용되기 때문에 임베디드되고 배포가 쉽습니다 (응용 프로그램과 함께 배포).Amazon.com을 포함하여 전자 상거래 응용 프로그램을 위해 Berkeley DB에 의존하는 여러 e-Retail 웹 사이트가 있습니다.

+2

BDB와의 관계를 밝혀야합니다. – user7116

+1

BerkeleyDB의 또 다른 문제점은 AGPL 라이센스입니다. 즉, 응용 프로그램에서 사용하려는 경우 독점 라이센스를 구입하거나 응용 프로그램을 오픈 소스해야합니다. – user1876508

0

이 데이터를 조각 낼 수 있습니까? 데이터 액세스 패턴이 간단하고 안정적입니까 (비즈니스 요구 사항의 변화에 ​​따라 변하지는 않습니까)? 이 데이터는 얼마나 중요합니까 (예 : 세션 컨텍스트는 복원하기가 너무 어렵지 않지만 사용자가 설정 페이지에 입력 한 일부 기본 설정은 손실되지 않아야합니다).

일반적으로 데이터를 공유 할 수 있고 데이터 액세스 패턴이 단순하고 너무 많이 변경되지 않는 경우 Redis를 선택합니다. 좀 더 안정적인 것을 찾고 고급 데이터 액세스 패턴을 지원한다면 Tarantool이 좋은 선택입니다.

0

확인 마십시오이 :

http://www.mongodb.org/

그것의 모든 주요 언어에 대한 드라이버를 지원하는 정말 좋은 없음-SQL 데이터베이스.

관련 문제