1 ~ 10 길이 될 수 있습니다. N = 54321이면 DB에 N = 12345로 저장합니다. 말 N은 당신이 그것을 저장 컬럼의 이름입니다.
당신이 = 5,432,154,321 K를 읽어 당신은 지금, K1 = 1,234,512,345를 얻을 DB 열을 확인, 너무 을이 일을 반대 할 때 그 값의 말을하게되는 N (P), K1 % 10^s == P, 여기서 s = floor (Math.log (P) + 1). 참고 : floor (Math.log (P) + 1)은 숫자의 자릿수입니다. 값 바닥 (Math.log (P) +1)은 에 저장 될 수도 있습니다. DB는 사전 계산 된 것으로, 따라서 은 매번 계산할 필요가 없습니다.
2)이 1)이 아프지 만 (여기에 나온 3 가지 아이디어 중 가장 좋음) 문자열 열에 저장하고 '연산자와 같은 것일 수 있습니다. 하지만 이것은 사소한 일입니다. 아마도 이미 으로 간주했을 것입니다.
3) 또는 ... 숫자를 역으로 저장하지만 도 k = 1 ... 10에 대해 모든 잔여 모 드 10^k를 저장합니다. 하지만
N % 10 == col1
or
N % 100 == col2
or
...
(N % 10^10) == col10.
여전히
매우 우아하지 같은 COL1, COL2, ..., col10 그럼 당신은 거의 직접 숫자를 비교할 수 있습니다, 검사가 될 것입니다 뭔가 (그리고 귀하의 경우에 해당되는 경우 확실히 확실하지 않음) .
나는 내 아이디어 1)를 확인하기로 결정했습니다. 여기에 예제가 (SQL Server에서 수행)입니다.
insert into numbers
(number, cnt_dig)
values
(1234, 1 + floor(log10(1234)))
insert into numbers
(number, cnt_dig)
values
(51234, 1 + floor(log10(51234)))
insert into numbers
(number, cnt_dig)
values
(7812334, 1 + floor(log10(7812334)))
select * From numbers
/*
Now we have this in our table:
id number cnt_dig
4 1234 4
5 51234 5
6 7812334 7
*/
-- Note that the actual numbers stored here
-- are the reversed ones: 4321, 43215, 4332187.
-- So far so good.
-- Now we read say K = 433218799 on the input
-- We reverse it and we get K1 = 997812334
declare @K1 bigint
set @K1 = 997812334
select * From numbers
where
@K1 % power(10, cnt_dig) = number
-- So from the last 3 queries,
-- we get this row:
-- id number cnt_dig
-- 6 7812334 7
--
-- meaning we have a match
-- i.e. the actual number 433218799
-- was matched successfully with the
-- actual number (from the DB) 4332187.
그래서이 아이디어는 나쁘지 않게 보입니다.
하나의 가능성은 데이터베이스 키로부터 [http://en.wikipedia.org/wiki/Trie]를 구성하고 메모리에서 해당 트라이를 검색하는 것입니다. 발견되면 데이터베이스에서 레코드를로드하십시오. –
인덱싱 된 열에서 10 개의 조회는 실제로 그렇게 오래 걸리지 않습니다. 데이터베이스 설계 (데이터베이스에 적용되지 않는 일반 알고리즘 또는 데이터 구조 응답이 아닌)를 찾고 있다면 [tag : algorithm]을 제거하고 해당 데이터베이스 태그를 추가하는 것이 좋습니다 (하지만 제가 말했던 것처럼 - 10 개의 조회는 실제로 그렇게 오래 걸리지 않을 것이고 훨씬 나은 방법이 있는지 확신하지 못합니다.) – Dukeling
@ JimMischel, 고마워요.하지만 메모리에로드하는 데 필요한 데이터 양이 엄청날 것 같아요. – PhilDin