我必须在MySQL中导入30,000个地方的可用性日历,而我仍然坚持结构设计。我需要一些能让我轻松查询并加入checkIn在给定日期的可用性的东西。
实际上,每天都有几个选项
现在什么是表格的最佳解决方案?
PlaceId Day AvailabilityCode ???
然后我会有366 * 30,000行?我很害怕。
还有更好的方法吗?
我应该解析的xml数据看起来像这样
<?xml version="1.0" encoding="utf-8" ?>
<vacancies>
<vacancy>
<code>AT1010.200.1</code>
<startday>2010-07-01</startday>
<availability>YYYNNNQQ</availability>
<changeover>CCIIOOX</changeover>
<minstay>GGGGGGGG</minstay>
<flexbooking>YYYYY</flexbooking>
</vacancy>
</vacancies>
重要的附加信息:问题是可用性日历是作为XML Feed提供的,我必须每10-20分钟导入一次并重新填充数据库。
答案 0 :(得分:1)
只有当某些内容不可用时,您才需要添加行。日期和房间的缺失行可以隐式解释为可用性
答案 1 :(得分:1)
我认为您的问题是XML Feed,而不是表格结构。最简单的解决方案是要求提供商仅提供增量而不是整个转储。但据推测,这是不可能的原因。
所以你必须这样做。您应该以某种方式存储XML提要,并将新文件与前一个文件进行比较。这将为您提供delta,然后您可以将其应用于数据库表。您可以采用多种方法,您选择的方法在很大程度上取决于您的编程能力以及数据库产品的功能。
例如,MySQL自5.1和it is still pretty limited以来只具有XML功能。因此,如果要预处理XML文件,则可能必须在数据库外部执行此操作。另一种方法是将最新文件加载到临时表中,并使用SQL查找并应用差异。
答案 2 :(得分:0)
365 * 30000只是一个表中的一千多万条记录,只有很小的字段(int id,日期或日期,以及代码,也可能是int或者char(1))。这在MySQL中是非常可行的,如果你对这个表有很多读取和频繁更新,它将成为一个问题。如果它只是偶尔更新,那么拥有10或2千万条记录的表就不会有什么问题。
但也许有更好的解决方案,尽管它可能更复杂。
听起来像是一些预订程序。如果是这样,每个地方可能会有季节可以预订。您可以为每个地点指定默认值,甚至可以为每个季节提供默认值。例如,一个地方从3月到8月可用,在其他月份不可用。然后,当在夏季预订某个地点并且它变得不可用时,您可以将该值放在您建议的表格中。
这样,您可以检查所请求地点的特定日期是否存在记录。如果它不存在,则检查'places'表中的默认值(30000条记录),或'season'表,其中每个季节每个季节都有一条记录(每个地方可能有2到4条记录)。这样你就可以减少很多记录。
但是请记住,如果每个地方几乎每天都有预订,这将无效。在这种情况下,您几乎不需要默认值,并且每天的状态表中仍会有数百万条记录。就像我之前说的那样,这可能根本不是问题,但无论如何你应该考虑更复杂的解决方案是否确实会帮助你减少数据。这取决于你的情况。