我有一个临时数据库,它将GEO位置存储为以下结构:
的国家
地区
城市
邮政编码
东经
纬度
我从供应商处获取数据。这个名字不相关。数据以CSV文件形式出现,列为
启动IP
结束IP
国家
地区
市
邮政编码
东经
纬度
数据来自CSV文件的事实往往会发生变化,例如邮政编码,城市名称,地区名称或IP范围。
处理数据导入的应用程序部分的工作方式如下: 删除国家,地区,城市,邮政编码等 并重新将数据填充到数据库中。
我需要一个更好的方法来解决这个问题。因为当应用程序处于活动状态时,我将丢失数据库中此条目的键。然而这个导入大约需要2分钟,这意味着应用程序将无法使用GEO Location db。所以我真的不能使用删除和插入。
我需要实现这样一种方式,我将所有数据加载到内存中,并将其与我从列表中读取数据时的结构完全匹配。即:国家字典,来自DB和CSV文件的区域字典。并检测更改并在一个事务中更新数据库。
问题是:如何映射它们,以便我可以检测到变化。换句话说,例如:如果国家/地区名称更改:),我需要使用CSV文件中更改为国家/地区名称的更新。好。但是,超过1个国家/地区的名称如何变化?区域,城市,邮政编码的想法相同。
是的,我将此广告存储为树状结构。国家是根节点,区域是第一级子级,城市是秒级别,邮政编码是樱桃。
有什么想法吗?
对不起。这有点长的解释。感谢您阅读本文的时间。
答案 0 :(得分:1)
对CSV文件执行差异并使用它来制作将更新数据库的SQL。
答案 1 :(得分:0)
如果要进行更新,可以使用RedGate SQL Comparer(MS SQL)。它非常好,会给你脚本。还有其他工具可以进行这种比较。步骤将是
替代: 将其上传到新的表名,删除旧表并将此新表重命名为原始表名。当然,你必须处理任何primany关键的外键关系