【发布时间】:2015-08-21 18:48:35
【问题描述】:
我有SQLite表包含1.5M行,表包含<lat,lng, info>,我想做的是,每次我从GPS收到数据“lat,lng”时,我应该访问表并显示相应的信息。
我的问题是,这个操作是否会很费时费力?如果是,每次收到 GPS 数据时,如何才能更好地从表中检索数据?
【问题讨论】:
-
应该不是问题,听起来很简单
where lat = x and lng = y。您可能需要考虑查询数据的频率问题,但您可以编写检查代码以确保不会连续查询相同的值。或者,如果您不希望对位置有太多更改,甚至可以添加缓存(这一切都取决于您的应用程序的功能)。此外,您可能需要考虑在移动设备上存储如此大表的存储空间,但同样取决于应用程序,除了存储所有数据之外,您可能没有其他选择 -
只需将它们放在诸如
ArrayList<MyLocationObject>之类的集合中即可。尽管我认为确实没有任何必要,但正如已经说过的那样,除非您不断轮询,否则不应该有真正的开销。如果您轮询过多,只需检查您最后一次轮询的点与您当前位置之间的距离是否大于某个增量。 -
我同意,这个问题太宽泛了。您没有提供任何上下文代码,这一切都围绕着您轮询数据库的次数的问题。如果你认为你做的太多了,很可能是太多了,你需要限制它。
-
@rmaik:在这种情况下,缓存将是当您将查询结果存储在内存中时,以便下次调用相同的查询时,您会从内存中获取结果,而不是从数据库中提取结果。例如,每次查询数据库时,将结果存储在某种列表中,键是查询输入(x 和 y)。然后每次需要查询时,首先检查列表是否匹配 x 和 y,如果找到匹配则使用该结果,如果不匹配则查询数据库(并缓存该结果)。
-
@rmaik:从内存中提取会更快,但是如果您开始进行大量查询,就会产生开销。如果缓存的内存使用量变得太大,它本身就会开始导致性能问题。选择实际上取决于情况。例如,您甚至可以将缓存限制为最后 10 个唯一查询,这可能是一个不错的选择。因此,如果设备没有移动,您不必继续查询数据库以获得相同的位置,只需使用内存中的那个。事实上,无论如何我肯定会考虑这样做