我目前正在做一个新系统的项目。 该系统将使用多种不同的网络服务来生成复合数据。
一些数据是复合的,我使用关系 SQL 表(服务器,特别是 MySQL)来组合数据以供进一步使用。
我的问题是我必须实现一些数据映射。
以国家为例。 在我们的系统中,国家键控(基于 CHAR 2 ascii 列的主键)ISO 3166-1 alpha-2 . 一项网络服务以完全相同的格式提供数据。而其他几个有自己的、唯一的整数类型标识符。
因为我即将实现代码内映射,所以我希望能够动态更新映射表,而无需更改代码。 因此我在考虑映射表。
我可能会生成一个表 service_mappings
,其中包含任意长度的列,例如 service_id
(我自己的特定服务标识符)、ref_id
(网络服务提供的数据),model
(我在我的系统中将其映射到什么数据),key
(这个 [service_id
, ref_id
] 对应于我的 model
)。
另一方面,我可能会为每个单独的模型选择一个映射表之类的东西,它将包含更少的键(从上一个表中获取 model
,因为它将由表名定义)。这可能更适合与某种 ORM 一起使用。
那么,我的问题如下:什么是正确方法,什么是最有效,也许有一些完全不同的技术?
缓存提示
回应近期answer by Alexey .
我们可能会使用一些缓存技术(例如 memcache),尽管对于主要数据源我们希望依赖 MySQL 因为我们有方法来创建和恢复备份,我们将不得不考虑如何实现它们。
此外,MySQL 似乎抑制了一些更快访问的方法,并且根据 research by DeNA实际上,在主键/唯一键查找方面,它可能比 noSQL 替代方案更快。
最佳答案
在您的情况下,我会将模型留在映射表中,而不是创建单独的表,因为找到合适的映射会容易得多。如果你想要更高效,你可以为这个映射使用一些 nosql 存储(比如 Redis 或 memcachedb),这通常更快更可靠。
关于mysql - 自己数据库中的外部数据(键)映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7871636/