我试图建立一个应用程序,将采取房地产MLS(多重上市服务)的CSV数据,并将其插入到数据库中。我已经处理好了CSV解析,但我在提高数据库效率方面遇到了麻烦。问题在于,众所周知,MLS数据提供程序可以在没有太多通知的情况下快速更改属性元素的格式。因此,如果有一个表将与数据一对一地匹配,则可能会导致将来加载数据时出现问题。
似乎大多数开发人员将每个元素放在一行中。即我当前的设置:
id = int
property_id = longint
element_key = char
element_value = text 正如你可以想象的那样,这是非常慢的,有上千个属性,每个属性都有大约80+元素。
我如何才能在保持数据库灵活性的同时提高效率呢?
是的,我知道memcache,并计划使用它。
发布于 2009-10-19 15:24:34
除非有一种方法可以控制数据提供商,否则您将受到数据提供商的摆布。这一点已经困扰数据库工作大约50年了,而且它不太可能在短期内改变。CSV的使用与潜在问题关系不大。
我怀疑改变的不仅仅是数据的格式,还有数据的语义,尽管您并没有这么说。
最好的办法是有一个或多个临时表,这些临时表将以您收到的格式记录CSV数据。准备好在提供商更改您的信息时更改这些表。然后编写一些过程,将这些数据转换为适合您的基表的形式,并将转换后的数据复制到基表。这些过程将需要定期维护,但您的基表将保持更稳定,只要您不必添加更多信息存储功能来匹配供应商提供的更改。
如果你的数据库必须是完全动态的,才能跟上不断变化的输入,那么你就只能使用像EAV这样的模型,它完全不了解数据的逻辑结构。这种无知使得EAV变得非常动态,但当您尝试将EAV数据转换为有意义的信息时,它将对您造成严重破坏。
发布于 2009-10-19 09:17:26
这真的取决于你想对数据做什么。一个文档式数据库加上一个全文索引器对您来说可能就足够了(实际上,只是一种持久形式的memcache)。然后,您只需将所有项目数据存储在单个行/文档中,并在需要时将其解包。
也许here中的一些东西可能会有用。
https://stackoverflow.com/questions/1586425
复制相似问题