sql >> Database >  >> NoSQL >> MongoDB

Omgaan met hoe MongoDB DateTime opslaat bij gebruik met Service Locator Pattern

Waarom slaat u UTC in de eerste plaats niet op in de DB? In de meeste gevallen DateTime moet worden opgeslagen in UTC, omdat het meestal verwijst naar een tijdstip. Dit geldt voor alles dat in fysieke zin naar tijd verwijst, en alles dat ervan uitgaat dat tijd monotoon, toenemend en uniek is, en geen van alle geldt voor de meeste lokale tijden.

Af en toe is het zinvol om lokale tijden te gebruiken:stel dat er elke dag om 9.00 uur een bus vertrekt. Dit betekent dat er 24 uur verstrijken tussen twee opeenvolgende gebeurtenissen. Als de tijdzone echter een zomertijd heeft, is dit eenmaal per jaar een interval van 23 uur, respectievelijk 25 uur.

Als u echter met dit soort gegevens moet ruziën, kunt u een eenvoudige DateTime doet het niet; Zomertijdregels kunnen veranderen, tijdzones kunnen veranderen, enz. In C# zijn de zomertijdregels die momenteel worden toegepast geldig, zelfs als de datum 'historisch' is. Datumberekening met historische data kan dus grote schade aanrichten. Als je hier echt mee om moet gaan, bewaar dan op zijn minst welke tijdzone waarin de tijd zich bevindt (niet alleen de offset, of zelfs alleen een isLocal vlag).

Het opslaan van tekstuele informatie in de database die binair kan worden opgeslagen lijkt me niet erg elegant, net zo min als het veranderen van de waarde in een tussenlaag. De eerste is inefficiënt en lijdt aan de eerder genoemde eigenaardigheden van de lokale tijd, de laatste heeft alleen het 2e probleem.

Trouwens, om het laatste te bereiken, zou je de eigenschap kunnen versieren met [BsonDateTimeOptions(Kind=DateTimeKind.Local)] , die de conversie voor u zal doen, maar lijdt natuurlijk aan dezelfde problemen.




  1. Gegevens importeren in uw nieuw gemaakte MongoDB-instanties

  2. Opslaan naar MongoDB in een lus

  3. Mongo DB-query in java

  4. Veel-op-veel relaties ontwerpen in MongoDB (in plaats van relationele tabellen)