sql >> Databáze >  >> NoSQL >> MongoDB

Zabýváme se tím, jak MongoDB ukládá DateTime při použití se vzorem Service Locator

Proč v první řadě neukládáš UTC do DB? Ve většině případů DateTime by měl být uložen v UTC, protože se obvykle vztahuje k určitému časovému bodu. To platí pro cokoli, co se týká času ve fyzickém smyslu, a cokoli, co předpokládá, že čas je monotónní, rostoucí a jedinečný, z čehož nic neplatí pro většinu místních časů.

Občas má použití místního času smysl:předpokládejme, že autobus odjíždí každý den v 9:00. To znamená, že mezi dvěma po sobě jdoucími událostmi uplyne 24 hodin. Pokud však časové pásmo obsahuje DST, bude to 23h, respektive 25h interval jednou ročně.

Pokud však potřebujete tento druh dat pohádat, stačí jednoduchý DateTime nedělá trik; Pravidla DST se mohou změnit, časová pásma se mohou změnit atd. V C# budou použita pravidla DST, která jsou aktuálně platné, i když je datum „historické“. Aritmetika dat s historickými daty tak může způsobit zmatek. Pokud se s tím opravdu potřebujete vyrovnat, měli byste uložit alespoň které časové pásmo, ve kterém je čas (nejen posun, nebo dokonce jen isLocal vlajka).

Ukládání textových informací do databáze, které lze uložit binárně mi nepřijde moc elegantní, stejně tak změna hodnoty v nějaké střední vrstvě. První z nich je neefektivní a trpí dříve zmíněnými zvláštnostmi místního času, ten má pouze 2. problém.

BTW, abyste dosáhli toho druhého, můžete nemovitost ozdobit pomocí [BsonDateTimeOptions(Kind=DateTimeKind.Local)] , který provede konverzi za vás, ale trpí samozřejmě stejnými problémy.




  1. Dotaz skupiny Mongoose v node.js / expresní trase

  2. Problémy s CORS. Baňka <-> AngularJS

  3. mongodb - získá nejvyšší hodnotu součtu seskupeného podle pole

  4. Jedinečný index MongoDB na prvku pole napříč dokumenty (nikoli ve vnořených dokumentech)