【问题标题】:GEO Location Database Updating AmbiguityGEO 位置数据库更新歧义
【发布时间】:2010-12-27 21:41:15
【问题描述】:

我有一个临时数据库,它将 GEO 位置存储为以下结构:
国家
地区
城市
邮政编码
经度
纬度

我从供应商处获取数据。名称不相关。数据来自 CSV 文件,列是
起始 IP
结束IP
国家
地区
城市
邮政编码
经度
纬度

CSV 文件中的数据往往会发生变化,例如邮政编码、城市名称、地区名称或 IP 范围。

处理数据导入的应用程序部分的工作方式如下: 删除国家、地区、城市、邮政编码等。 并将数据重新填充到数据库中。

我需要一个更好的方法。因为当应用程序运行时,我将丢失数据库中这些条目的键。但是这个导入大约需要 2 分钟,这意味着应用程序将无法使用 GEO Location db。所以我不能真正使用删除和插入。

我需要这样实现,将所有数据加载到内存中,并与我从列表中读取数据时的结构完全匹配。即:来自数据库和 CSV 文件的国家字典、地区字典。并在一个事务中检测更改并更新数据库。

问题是:如何映射它们,以便我可以检测到变化。换句话说,例如:如果国家/地区名称更改:),我需要使用 CSV 文件中更改为国家/地区名称的任何内容进行更新。好的。但是超过 1 个国家/地区名称更改如何?地区、城市、邮政编码的想法相同。

是的,我将此广告存储为树结构。 Country 是根节点,Regions 是一级子节点,Cities 是秒级,Postal code 是樱桃。

有什么想法吗?

对不起。这解释起来有点长。感谢您阅读本文所花费的时间。

【问题讨论】:

    标签: c# .net database geolocation


    【解决方案1】:

    对 CSV 文件执行 diff 并使用它来制作将更新数据库的 SQL。

    【讨论】:

    • 嗯。我会考虑的。谢谢。
    • 这不是一个简单的解决方案,但它会产生最好的结果。如果你能找到一种方法来自动读取哪些列已更新,哪些行是新的或删除的,生成 SQL 将相当简单。
    • 我可以从经度和纬度中检测到它,当然如果它们永远不会改变的话。而且我们不使用 SQL 也不使用 ORM。这是别的东西:)
    【解决方案2】:

    如果您想进行更新,您可以使用 RedGate SQL 比较器 (MS SQL)。非常好,给你脚本。还有其他工具可以进行这种比较。步骤将是

    1. 将您的数据库设置为单用户模式,运行更新,从单用户模式释放它

    替代方案: 将其上传到新表名中,删除旧表并将此新表重命名为原始表名。当然,您还必须处理任何主键外键关系

    【讨论】:

    • 我很抱歉,但我没有要求 MS SQL 或任何其他数据库。
    • 哦,我明白了,您想从您的应用程序中执行此操作吗?
    • 我使用面向对象的数据库。所以没有 SQL 语法。只有对象。是的,我想从应用程序中做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    • 2013-02-19
    相关资源
    最近更新 更多