Database design MLS数据库模式

Database design MLS数据库模式,database-design,data-modeling,Database Design,Data Modeling,我正试图建立一个应用程序,将采取一个房地产MLS(多重上市服务)的数据从一个CSV和插入到数据库中。我已经处理了CSV解析,但是我在提高数据库效率方面遇到了问题。问题在于,众所周知,MLS数据提供程序可以在没有太多通知的情况下快速更改属性元素的格式。因此,如果有一个表与数据一一对应,可能会导致将来加载数据时出现问题 似乎大多数开发人员都将每个元素放在一行中。IE我当前的设置: id = int property_id = longint element_key = char element_v

我正试图建立一个应用程序,将采取一个房地产MLS(多重上市服务)的数据从一个CSV和插入到数据库中。我已经处理了CSV解析,但是我在提高数据库效率方面遇到了问题。问题在于,众所周知,MLS数据提供程序可以在没有太多通知的情况下快速更改属性元素的格式。因此,如果有一个表与数据一一对应,可能会导致将来加载数据时出现问题

似乎大多数开发人员都将每个元素放在一行中。IE我当前的设置:

id = int
property_id = longint 
element_key = char
element_value = text 
可以想象,这是非常缓慢的,有1000个属性,每个属性大约有80多个元素

如何提高效率,同时保持数据库的灵活性


是的,我知道memcache并计划使用它

这实际上取决于您想对数据做什么。一个文档样式的数据库加上一个全文索引器可能就足够了(实际上,只是一个持久形式的memcache)。然后,您只需将所有项目数据存储在一行/文档中,并在需要时将其解压缩


也许有些东西可能有用。

除非有办法控制它们,否则你只能听命于数据提供者。这是数据库工作的祸根,已经有大约五十年了,而且不可能很快改变。CSV的使用与根本问题没有多大关系

我怀疑不仅仅是数据的格式发生了变化,而且数据的语义也发生了变化,尽管您没有这样说

您最好的选择是有一个或多个暂存表,这些表将以您收到的格式记录CSV数据。随时准备在提供者更改您的内容时更改这些表。然后编写一些过程,将这些数据转换成适合基表的形式,并将转换后的数据复制到基表中。这些过程将需要定期维护,但只要不必添加更多信息存储功能以匹配供应商提供的更改,您的基表将保持更稳定


如果您的数据库必须是完全动态的,才能跟上不断变化的输入,那么您的数据库必须使用一些模型,如EAV,它完全不知道数据的逻辑结构。这种无知使EAV变得非常动态,但当您尝试将EAV数据转换为有意义的信息时,它会给您带来灾难。

或者,如果模式非常动态,NoSQL数据存储可能比EAV更有意义-同样的功能,更少的开销(当然,大多数问题都是相同的)关于所谓的EAV模型下的数据完整性问题的一个很好的评论。