我正在尝试构建一个应用程序,它将从CSV中获取房地产MLS(多列表服务)数据并将其插入数据库。我已经处理了CSV解析,但是我在使数据库高效方面遇到了麻烦。问题是已知MLS数据提供者在不太注意的情况下快速更改属性元素的格式。因此,让一个表与数据匹配1到1可能会导致将来加载数据时出现问题。
似乎大多数开发人员将每个元素放在一行中。 IE我当前的设置:
id = int
property_id = longint
element_key = char
element_value = text
你可以想象,这是非常缓慢的1000个属性,每个属性约80个元素。
如何才能提高效率,保持数据库的灵活性?
是的,我知道memcache并计划使用它。
答案 0 :(得分:1)
除非有办法控制它们,否则您将受到数据提供者的支配。这已成为数据库工作的祸根已有五十年了,而且不太可能很快改变。 CSV的使用与潜在问题几乎没有关系。
我怀疑它不仅仅是数据格式的变化,而且还有数据的语义,即使你没有这么说。
您最好的选择是拥有一个或多个临时表,这些表将以您收到的格式记录CSV数据。准备好在提供商改变您的情况时更改这些表。然后编写一些过程,将这些数据转换为适合您的基表的形式,并将转换后的数据复制到基表。这些过程需要定期维护,但只要您不必添加更多信息存储功能以匹配供应商提供的更改,您的基表将保持更稳定。
如果您的数据库必须是完全动态的,以便跟上不断变化的输入,那么您就会遇到像EAV这样的模型,它完全不了解数据的逻辑结构。这种无知使EAV变得非常动态,但当你试图将EAV数据变成有意义的信息时,它会给你造成严重破坏。
答案 1 :(得分:0)
这实际上取决于您想要对数据做什么。文档样式的数据库加上一个全文索引器可能就足够了(实际上,只是一种持久的memcache形式)。您只需将所有项目数据存储在单行/文档中,然后在需要时将其解压缩。
也许某些内容here可能有用。