s********e 发帖数: 893 | 1 一个Table里有5万个地址,每个地址已经计算了latitude和longitude。
现在需要找出每个地址的50Mile以内的其它地址和相应距离。我打算把这5万个地址的
50mile以内的其他地址都先算好,把ID和距离存在table里面。现在有两种储存方式:
1.
ID DIST_ID Distance
1234 3434 2.3
1234 3456 3.4
1234 6655 12.5
1234 6644 26.5
1234 7788 45.6
如果平均每个地址有20个其他地址在50mile以内,那这个table就有1Million条记录
第二种储存方式是:
2. ID Dist_ID_Mile
1234 3434,2.3, 3456,3.4,6655,12.5,6644,26.5,7788,45.6
这样这个Table也是5万条记录。
只是检索时要parse 后面这个长字符串,把ID和distance另外保存起来。这个工作可以
在web application里做。
请问大家这两种的利弊.要用在web 实时检索,所以performance要好。或者有没有更好
的办法。谢谢了! |
i*****w 发帖数: 75 | 2 Note that the distance between A and B is the same for B and A. So you
should not have 1mi rows. When using option 1 storing data, just check to
see if the querying ID matches your ID OR DIST_ID column.
【在 s********e 的大作中提到】 : 一个Table里有5万个地址,每个地址已经计算了latitude和longitude。 : 现在需要找出每个地址的50Mile以内的其它地址和相应距离。我打算把这5万个地址的 : 50mile以内的其他地址都先算好,把ID和距离存在table里面。现在有两种储存方式: : 1. : ID DIST_ID Distance : 1234 3434 2.3 : 1234 3456 3.4 : 1234 6655 12.5 : 1234 6644 26.5 : 1234 7788 45.6
|
s********e 发帖数: 893 | 3 谢谢楼上的答复。这个的确可以减少一半的records。适用于所有地址都在一个Table这
种情况。
还有另外一个table A只有3000条地址,需要从这个5万条记录的table B中找出Table A
里每个地址50mile以内的地址。写了个stored procedure,10几分钟运行完后,新的
distance table有2.5Mil record,平均每条地址有800条其他地址在50mile内, 而不
是我预测的20条。 测试了一下用方法1检索的时候速度很快,结果都是在0.0几秒内出
来。
如果按照方法2把这800个distane和他们对应的ID存在一个字符串里,再parse,直觉觉
得会不入方法1。
再次感谢! |
w*****m 发帖数: 20421 | 4 5万个地址还好吧,要有5百万个地址怎么办,
还有如果有一个新地址进来找附近50MILES的,
你这个还是搞不了的,不是有SPATIAL DATATYPE了
么 |
s********e 发帖数: 893 | 5 谢谢楼上提示。Oracle 和Sql server现在都有spatial datatype了,还有现成的
function计算距离。所以在web applicaiton 里实时直接计算就应该可以了,不用预先
存储。多谢了。 |