2012-04-24 1 views
0

모든 코드는 고정 길이의 문자열로 2 백만 개의 코드를 저장해야합니다. 모든 코드에는 사용 된 코드를 나타내는 'used'라는 부울 속성이 있습니다. 또는 아닙니다 (!). 코드의 양은 영원히 동일 할 것이며 (코드 생성 없음, 삭제 코드 없음, 업데이트 코드 없음) 유일한 업데이트 동작은 기존 코드의 사용 된 속성에 대한 것입니다.빠른 액세스를 위해 데이터베이스에 200 만 개의 문자열을 저장하는 방법

사용자가 웹 양식에 코드를 입력 할 때마다 해당 코드를 검색하고 해당 코드가 사용되었는지 확인하고 사용하지 않았 으면 사용 된 것으로 표시해야합니다.

코드를 입력하는 사용자가 많을 것입니다 (동시에 최대 50 개까지, 그게 제게는 제비 뽑기입니다!) 그래서 제 웹 응용 프로그램을 느리게 만드는 것이 좋은 방법이 될지 궁금합니다.

포스트 그레스 (내가 가장 좋아하는 DBMS)를 사용하면 이것이 가능합니까? 포스트 그레스의 특징은 무엇입니까? 지수?

nosql에서 가장 잘 수행되는 작업입니까? 아마 redis?

클라우드 서버 (랙 스페이스)를 사용할 것입니다. 어느 정도의 숫양을 넣어야합니까? 데이터베이스에 다른 일이 생기 겠지만 비교의 중요성은 없습니다. 나는 1GB를 추측하고있다.

다른 어떤 것들을 조사해야합니까?

나를 위해 어떤 연구를하고 싶지는 않지만이 문제를 자세히 조사 할 수있는 몇 가지 지침이 필요합니다.

감사합니다.

답변

1

예 SQL 데이터베이스에서이를 수행합니다.

는 적어도 두 개의 열, used_flag 및

코드에 인덱스를 추가 코드와 테이블을 만들 수 있습니다.

+0

나는 그렇게 할 것입니다! [Postgres docs] (http://www.postgresql.org/docs/9.1/static/ddl-constraints.html)에 따르면 : _ 고유 제한 조건을 추가하면 사용 된 열 또는 열 그룹에 고유 한 btree 인덱스가 자동으로 만들어집니다 constraint_에서. 내 코드가 모두 다르기 때문에 모든 것입니다! 감사합니다 :) –

+3

더 빠른 HOT 업데이트를 사용할 수 있도록 기본값보다 100 % 작은 fillfactor로 해당 테이블을 정의해야합니다. 그게 내 테스트에서 30 배 정도 빨리 달릴 수 있습니다. 사용 된 플래그를 인덱싱하지 마십시오. 그냥 코드에. 또한 별도의 SELECT를 사용하여 코드의 현재 상태를 테스트하지 마십시오. 'UPDATE ... WHERE code = x AND NOT used_flag'. 영향을받는 행 수를 확인하여 플래그가 설정되어 있는지 확인할 수 있습니다. – kgrittn

+0

팁 주셔서 감사합니다! 한 가지, [CREATE INDEX doc page] (http://www.postgresql.org/docs/9.1/static/sql-createindex.html)는 _B-trees가 기본 fillfactor 인 90을 사용한다고 말합니다. 포스트 그레스는 정말 내 인생을 더 단순하게 만들고 싶어합니다. –

0

적절한 색인 코드 필드를 사용하여 충분히 빠릅니다. 데이터베이스는 2 백만 반복을 만들지 않을 것이며, 인덱스는 2 백만 ~ 20의 로그가 될 것입니다. 20 반복은 충분히 빨라야합니다.

+0

그게 내가하려고 할거야. Postgres는 모든 코드가 다르고 고유 한 필드에 대한 인덱스가 자동으로 작성되기 때문에 저에게 도움이됩니다. 나는 아직 upvote 수 없으므로 고마워 :) –

+0

Btrees는 이진 검색 트리가 아니며 콜드 인스턴스의 검색 시간은 대략 CC * D * log2 (LF) + IOC * logD (N) 여야합니다. 여기서 CC는 CompareCost, IOC입니다. 는 IOCost, LF는 LoadFactor (인덱스 블록 당 평균 키 수), D는 트리 깊이 (logLF (N))입니다. IOC는 일반적으로 CC보다 훨씬 크며 인덱스가 캐싱되지 않을 때 지배적이지만 캐싱과 관련하여 얼마나 중요한지 예측하기 어렵습니다. – dbenhur

+0

B 트리 또는 R 트리 상관 없습니다. 큰 O 표기법에 따르면, 그것은 로그입니다 – Anton

관련 문제