2014-04-24 10 views
1

Ip 범위를 다른 테이블의 위치 ID에 연결하는 데이터베이스가 있습니다. 너무 커서 우리는 aerospike를 사용하여 새로운 솔루션을 만들려고 노력하고 있습니다.프로세스를 얻고 4200 만 개의 행을 업로드하는 가장 빠른 방법

우리가 생각해 낸 해결책은 간격을 사용하는 것입니다. 이런 식으로 뭔가 :

키 : 1000000 (IP 주소의 INT64) Bin1을 : 1234567 : 블록 2 (첫 번째 IP 위치 ID 변경 기본 :

BIN2 1 (주어진 블록의 시작을위한 위치 ID)) :(locationID)

BIN3 : 1,345,678 : 위치 ID 변경) :(locationID)

이 방법을 사용하여 우리가 mathmatically는 IP에서 위치 ID를 얻을 수있는 블록 3 (두 번째 IP 여전히 커팅하면서 행의 크기와 서버 처리 시간을 줄입니다.

아이디어를 테스트하고 싶지만 현재 시스템을 변환하는 데 문제가 있습니다.

관련 위치 ID가있는 범위 (예 : 0-160000)가있는 데이터베이스가 있습니다.

범위 테이블에는 9,297,631 개의 행이 있습니다. 호출 당 약 4 초 정도 소요

SELECT * FROM dbo.GeoIPRanges 
where (startIpNum BETWEEN 300000000 AND 300000100) 
OR (endIpNum BETWEEN 300000000 AND 300000100) 
OR (startIpNum <= 300000000 AND endIpNum >= 300000100) 

:

내가 만든 C# 1 스크립트

이 SQL을 실행한다. 위의 숫자는 예제 번호입니다. 그들은 100 블록 단위로 볼 수 있습니다. 최대 ip amount는 4,294,967,295입니다. 이것을 100 블록마다 나누면 42,949,672 건으로 약 4 초가 걸립니다. 매우 오랜 시간이 걸립니다. 항공 교통에 대한 정보를 원하는 형식으로 처리하는 데 걸리는 처리 시간은 무시할 수 있습니다.

이 정보를 모두 알고 있다면 속도를 높이는 방법에 대한 아이디어가 있습니까?

+0

데이터를 새로운 서버로 이동하거나 Aerospike로 작업해야하는 테이블의 데이터를 수정하고 있습니까? – Siyual

+0

이전 데이터 유지, 처리 된 데이터를 새 서버에서 aerospike로 이동 –

+0

SSIS를 사용하여 서버간에 데이터를 처리하고 전송하는 것이 고려 되었습니까? – Siyual

답변

1

Aerospike-loader tool이 있습니다. csv 파일 형식으로 데이터를 덤프 할 수 있다면 로더는 데이터를 aerospike에로드 할 수 있습니다. 여러 개의 CSV 파일을 병렬로 읽고 데이터를 병렬로 Aerospike에로드 할 수 있습니다. 적절한 벤치 마크에서 하드웨어는 초당 최대 200,000 개의 레코드를로드 할 수있었습니다. 자세한 내용은 예제 & 예제를 참조하십시오.

+0

비록 내가 지금 내 프로그램을 빠르게 작동 시켰지만 지금은 정상적으로 작동한다. 이것은 지역 사회에 대한 귀중한 대답이다. 그래서 대답으로 표시하고 +1했다. –

0

이것은 생각한 것이 아니지만 어제 저는 R을 사용하여 SQL Server에서 일부 데이터 세트를 추출했으며 SQL Server 자체보다 빠르게 MAGNITUDES로 판명되었습니다. 이 방법론에 대해 조금 연구를하고 다음과 같은 것을 시도해보십시오.

library(XLConnect) 
library(dplyr) 
library(RODBC) 

dbhandle <- odbcDriverConnect('driver={SQL Server};server=Server_Name;database=DB_Name;trusted_connection=true') 

NEEDDATE <- as.Date('8/20/2017',format='%m/%d/%Y') 

# DataSet1 
DataSet1<-paste("DECLARE @NEEDDATE nvarchar(25) 
SET @NEEDDATE = '2017-07-20' 

SELECT  . . . 

     )") 


DataSet1 <- sqlQuery(dbhandle, DataSet1) 
DataSet2 <- sqlQuery(dbhandle, DataSet2) 

Combined <- rbind(DataSet1, DataSet2) 



ExcelFile <- loadWorkbook("C:/Test/Excel_File.xlsx") 


Sheet1=tbl_df(readWorksheet(ExcelFile,sheet="Sheet1")) 
Sheet2=tbl_df(readWorksheet(ExcelFile,sheet="Sheet2")) 


write.csv(DataSet1, paste0("C:/Test/Output_", NEEDDATE, ".csv"), row.names = FALSE)