sql >> Database teknologi >  >> NoSQL >> MongoDB

Beskæftiger sig med, hvordan MongoDB gemmer DateTime, når det bruges med Service Locator Pattern

Hvorfor gemmer du ikke UTC i DB'en i første omgang? I de fleste tilfælde DateTime skal gemmes i UTC, fordi det normalt refererer til et tidspunkt. Dette gælder for alt, der refererer til tid i fysisk forstand, og alt, der antager, at tiden er monotonisk, stigende og unik, hvoraf ingen er sande for de fleste lokale tider.

Nogle gange giver det mening at bruge lokale tider:antag, at en bus kører hver dag kl. 9.00. Det betyder, at der går 24 timer mellem to på hinanden følgende begivenheder. Men hvis tidszonen har en sommertid, vil det være et 23 timers henholdsvis 25 timers interval en gang om året.

Men hvis du har brug for at skændes med denne slags data, en simpel DateTime gør ikke tricket; DST-regler kan ændre sig, tidszoner kan ændres osv. I C# er de DST-regler, der vil blive anvendt, dem, der er aktuelt gyldig, selvom datoen er 'historisk'. Datoregning med historiske datoer kan således skabe kaos. Hvis du virkelig har brug for at klare dette, bør du i det mindste gemme hvilke tidszone tiden er i (ikke kun forskydningen, eller endda bare en isLocal flag).

Lagring af tekstinformation i databasen, der kan gemmes binært, virker ikke særlig elegant for mig, og det gør det heller ikke at ændre værdien i et eller andet mellemlag. Førstnævnte er ineffektiv og lider af de tidligere nævnte ejendommeligheder ved lokal tid, sidstnævnte har kun det 2. problem.

BTW, for at opnå det sidste, kan du dekorere ejendommen med [BsonDateTimeOptions(Kind=DateTimeKind.Local)] , som vil gøre konverteringen for dig, men lider selvfølgelig af de samme problemer.




  1. Hvordan afbryder jeg en kørende forespørgsel i MongoDB-skallen?

  2. få den relevante information mod objektværdien i MongoDB

  3. Pymongo cursor limit(1) returnerer mere end 1 resultat

  4. Deling af en sessionsbutik på Redis for en Django- og en Express.js-applikation