2012-09-25 5 views
1

페이스 북 (9 억 명 이상), 트위터 (3 억 명 이상) 등이 데이터베이스에서 사용자의 로그인 이름과 암호를 선택할 수있는 방법을 알고 싶습니다 사용자가 입력 한 로그인 자격 증명이 올바른지 확인하십시오. ,데이터베이스와 SQL에 대한 약간의 설명

SELECT * FROM Persons 
WHERE username=[username from user] 
    and password = [password from user] 

하지만 페이스 북과 같은 더 큰 시스템의 그들은 모두 900 만명의 사용자를 선택하고 사용자의 로그인 때 단일 사용자의 로그인 자격 증명을 확인 할 : SQL의 예를 들어 당신이 사용할 수 있습니까? 그렇지 않다면 그들은 무엇을합니까?

PS :이 지역에서 새로운이기 때문에

오전 물어. SQL을 알고 있지만 수백만 명의 사용자가있는 시스템이 사용자의 로그인 자격 증명과 사용자가 사이트의 특정 정보를 검색하는 기타 관련 상황을 확인하는 방법을 알고 싶습니다.

+3

1 : 암호를 일반 텍스트로 저장하지 않습니다. – SLaks

+0

아니요. 색인에 대해 알아야합니다. 성능에 관심이있는 경우에는 메모리 내 데이터베이스 및 병렬 처리에 대해서도 알아야합니다. –

+1

대부분의 DB 시스템은 수백만 개의 레코드를 처리 할 수 ​​있으며 한 줄을 재빨리 효율적으로 길게 찾을 수 있습니다. (링크 수는 http://stackoverflow.com/q/3479720/1073063입니다.) – Pablo

답변

4

예, 이것이 테이블 쿼리 방법입니다. 이것이 SQL의 목적이며 많은 양의 데이터를 효과적으로 쿼리합니다.

적절하게 indexed 열을 매우 효율적으로 정렬/필터링 할 수 있습니다. 데이터베이스는 9 억 개의 레코드에 대한 선형 검색을 수행하지 않고 있으며, 최적화 된 binary search을 사용합니다. 완벽하게 균형 잡힌 이진 트리를 가정 할 때, 900,000,000을 검색하는 최악의 경우는 비교 만 필요하며 이는 900,000,000의 log2입니다.

+0

로그인 할 때 Lucene, Solr 등과 같은 검색 엔진을 사용할 필요가 없습니다. 또는? –

+1

@EddyFreeman 아니, 절대적으로 아닙니다. 그것들은 "전체 텍스트"검색을 수행하기위한 것입니다. 즉, 짧은 고정 길이 문자열에 쉽게 저장할 수없는 큰 얼룩을 검색하는 것입니다. 사용자 이름과 같은 짧은 단일 단어 열에 대해 검색하는 데는 어떤 방식으로도 유용하지 않습니다. – meagar

+0

답장을 보내 주셔서 감사합니다. 지금까지 내가 읽었던 내용과 주석은 데이터베이스 색인 작업을 직접 수행해야한다는 것을 의미합니다. 색인 생성 기능이 자동으로 데이터베이스 시스템 (MySQL, Postgre 등 ...)에 내장되어 있지 않다는 것을 의미합니까? –