sql >> Database >  >> RDS >> Mysql

Efficiënt bepalen of een bedrijf open is of niet op basis van winkeluren

Als je bereid bent om slechts naar één week per keer te kijken, kun je alle openings-/sluitingstijden canoniek maken om het aantal minuten in te stellen sinds het begin van de week, zeg zondag 0 uur. Voor elke winkel maakt u een aantal tuples van de vorm [startTime, endTime, storeId]. (Voor uren die zondag middernacht overspannen, zou je twee tuples moeten maken, één gaat naar het einde van de week, één begint aan het begin van de week). Deze set tupels zou worden geïndexeerd (bijvoorbeeld met een boom die u vooraf zou verwerken) op zowel startTime als endTime. De tuples zouden niet zo groot moeten zijn:er zitten maar ~10k minuten in een week, die in 2 bytes passen. Deze structuur zou sierlijk zijn in een MySQL-tabel met geschikte indexen, en zou zeer goed bestand zijn tegen constante toevoegingen en verwijderingen van records als informatie veranderde. Uw zoekopdracht zou eenvoudigweg "select storeId where startTime <=time and endtime>=time" zijn, waarbij de tijd de gecanoniseerde minuten was sinds middernacht op zondag.

Als informatie niet vaak verandert en u wilt dat de zoekopdrachten erg snel zijn, kunt u elke mogelijke vraag vooraf oplossen en de resultaten in de cache opslaan. Er zijn bijvoorbeeld slechts 672 kwartierperioden in een week. Met een lijst met bedrijven, die elk een lijst met openings- en sluitingstijden hadden, zoals de oplossing van Brandon Rhodes, kun je eenvoudig elke periode van 15 minuten in een week doorlopen, uitzoeken wie er open is en het antwoord vervolgens opslaan in een opzoektabel of in-memory lijst.



  1. MySQL UITLEG 'type' verandert van 'bereik' in 'ref' wanneer de datum in het waar-statement wordt gewijzigd?

  2. Toegang tot docker-container mysql-databases

  3. Print resultaten in MySQL-formaat met Python

  4. Rijen en kolommen transponeren zonder aggregatie