1

我有一个将 Ip 范围链接到另一个表中的位置 ID 的数据库。它是如此之大,我们正在尝试使用 aerospike 制作一个新的解决方案。

我们想出的解决方案是使用间隔。像这样的东西:

键:1000000(IP 地址的 int64) Bin1:默认值:1(给定块开始的位置 ID)

Bin2: 1234567:2 (位置 ID 更改的块中的第一个 ip):(locationID)

Bin3: 1345678:3 (block 中的第二个 ip 位置 id 发生变化):(locationID)

ETC

使用这种方法,我们可以在数学上从 ip 获取位置 id,同时仍然减少行的数量和服务器处理时间的数量。

我想对我的想法做一些测试,但我在转换我们当前的系统时遇到了问题。

我们有一个数据库,其范围(例如 0-160000)具有关联的位置 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 个为单位。最大 ip 数量为 4,294,967,295。以 100 个块为单位执行此操作,我得到了 42,949,672 个调用,每个调用大约 4 秒。这需要很长时间。将信息格式化为我想要的 aerospike 样式所需的处理时间可以忽略不计。

了解所有这些信息后,是否有任何关于如何加快速度的想法。

4

2 回答 2

1

有一个Aerospike-loader 工具。如果您可以将数据转储为 csv 文件格式,则加载程序可以将数据加载到 aerospike。它可以并行读取多个 CSV 文件,并将数据并行加载到 aerospike 中。在内部基准测试中,在不错的硬件上,我们每秒可以加载多达 200,000 条记录。阅读文档和示例以获取详细信息。

于 2014-05-06T08:44:41.280 回答
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)
于 2017-09-23T11:12:10.403 回答