我有一个数据库,它将Ip范围链接到另一个表中的位置ID。它如此之大,我们正试图使用空中加速器来制作新的解决方案。
我们提出的解决方案是使用间隔。像这样:
密钥:1000000(ip地址的int64) Bin1:默认值:1(给定块开始的位置ID)
Bin2:1234567:2(位置ID更改的块中的第一个ip):( locationID)
Bin3:1345678:3(位置ID更改的块中的第二个ip):( locationID)
等
使用这种方法,我们可以从数学上获取ip的位置id,同时仍然减少行的数量,以及服务器处理时间的数量。
我想对我的想法进行一些测试,但我在转换现有系统时遇到了问题。
我们有一个数据库,其范围(例如0-16,000)与相关的位置ID。
范围表有9,297,631行。
我制作的c#脚本执行这个sql:
SELECT * FROM dbo.GeoIPRanges
where (startIpNum BETWEEN 300000000 AND 300000100)
OR (endIpNum BETWEEN 300000000 AND 300000100)
OR (startIpNum <= 300000000 AND endIpNum >= 300000100)
每次通话大约需要4秒钟。以上数字是示例数字。你可以看到它们是100块.max ip ammount是4,294,967,295。以100块为单位执行此操作会使我获得42,949,672个呼叫,每个呼叫大约4秒。这需要很长时间。将信息格式化为我想要进行空中加速的方式所需的处理时间可以忽略不计。
了解所有这些信息,是否有任何关于如何加快这一点的想法。
答案 0 :(得分:1)
有一个Aerospike-loader tool。如果您可以以csv文件格式转储数据,则加载程序可以将数据加载到aerospike中。它可以并行读取多个CSV文件,并将数据并行加载到aerospike中。在内部基准测试中,在合适的硬件上,我们每秒最多可以加载200,000条记录。阅读文档&amp;细节的例子。
答案 1 :(得分:0)
这可能不是你想的那样,但就在昨天我用R从SQL Server中提取了一些数据集,结果证明它比SQL Server本身更快。对这种方法做一点研究,然后尝试这样的事情......
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)