建议用于组织应用程序的noSQL数据结构

时间:2019-01-29 22:24:20

标签: database mongodb nosql indexeddb

我正在重新设计组织应用程序的数据结构问题是试图提出最佳结构,并归结为建立索引和保持结构灵活。它基于JSON结构,从对象映射或对象数组问题开始。 [{}]与{{}}。应该使用关键字为每个顶级对象建立索引,还是应该将关键字放置在对象内部,并分别生成索引。)

该应用程序包含用户任务,约会,事件和注释。我在客户端上使用了Localstorage,在服务器上使用了mongoDB。对于客户端,我将改用IndexedDB,并将借此机会重新设计本地JSON数据结构。

使用Google日历api时,我注意到许多结果只是日历事件的随机列表。该列表是具有相关事件信息的对象数组。当然,这些是REST请求的结果,而不是实际的数据存储结构本身,但是让我开始思考...以前,我的数据是所有键:值对,有时是嵌套的,但始终以键开头。 {{}}

例如,使用以一个时代号(或者可以是isoDateTime字符串)表示的startTime键: {{}}

"events": {
    (EPOCH NUMBER): {
        creationDate: (EPOCH NUMBER),
        UID: (STRING),
        summary: (STRING),
        endDateTime: (EPOCH NUMBER)
    }
    ...
}

vs [{}]

"events": [{
    startDateTime: (EPOCH NUMBER)
    creationDate: (EPOCH NUMBER),
    UID: (STRING),
    summary: (STRING),
    endDateTime: (EPOCH NUMBER)
    }
    ...
]

首先,我可以轻松获取事件的日期范围,测试是否存在某天的事件,获取所有密钥等。我可以使用我的唯一密钥直接保存到localstorage或mongodb。我也有一个密钥生成器,可以增加isoDateTime密钥(在它们可能重叠的情况下,javascript epoch使用毫秒,因此每秒有1000次差异,因此我不关心重叠的密钥)。问题:如果更改事件开始时间,则需要更改密钥或使用正确的密钥生成新对象。总体上看似有效,但方法比较脆弱。

在第二个应用程序初始化中,我可以运行一个索引函数,该函数按startDateTime进行排序,每个索引都指向关联的对象。要保存到存储,由于我没有明显的键/值对,因此会更加有趣。我可以将数组保存在关键的“事件”下,但是我不确定更新如何工作,除非我还要在所有数组位置上保留索引。这样可以更加灵活,因为我可以轻松更改startTime字段,并且可以有多个索引,也可以轻松更改。

有两个问题:首先,在两个选项{{}}和[{}]之间,这是用于保存需要索引的嵌套数据的更推荐方法。其次,我将所有dateTime数据保存为UTC(渲染到本地时区时在客户端上更改),我应该使用isoDateTime字符串还是仅使用Epoch数字?

任何建议或反馈都非常感谢,我几天来一直在研究不同的场景和算法。我真的很想正确。

谢谢, 保罗

1 个答案:

答案 0 :(得分:0)

我的第一个直觉是基本上创建事件的对象存储。为每个事件提供一个自动递增的ID。对于每个事件,请确保您存储了一些基本属性,例如开始日期,结束日期等。然后,对于希望运行的特定查询并希望它们快速完成,请在所涉及的属性上创建索引。

在商店上迭代时,事件将根据id进行排序,但是在索引上进行迭代时,事件将按日期或其他排序。

如果要导出为json,则将导出包含事件对象数组的对象。

对于nosql,每个事件具有相同的属性并不重要。仅对象类型本身以及最少的属性集(如键路径)都很重要。其余属性是完全可变的,应将其理解为只是“杂物包”。道具。

如果这没有帮助,那么我想我误解了这个问题。