这将是一个长篇文章,对不起提前。我有一些使用MongoDB的经验(已经有一段时间了)我和python一样,但我有一个很大的项目,我想在花费大量时间编码之前得到一些反馈。
该项目涉及创建一个图库,其中可以选择单个演示幻灯片(来自Apple主题演讲' 09)并将其一起解析为演示文稿。这样,拥有几千张幻灯片的用户可以使用此程序通过混合和匹配旧幻灯片来创建新演示文稿,而不必打开每个演示文稿并将所有所需幻灯片手动复制粘贴到新演示文稿中。
在程序中有一个包含所有幻灯片的主库。可以选择每个幻灯片并分配可搜索的标签。新的"团体"可以形成幻灯片,其中具有特定标签集的所有幻灯片被自动添加到组中。此外,可以从主库中拖动单个幻灯片,然后将其拖放到用户创建的组中。
每张幻灯片都有一个包含预览图像的文件夹,这就是为什么我认为我需要MongoDB:通过拥有一个数据库,其中每张幻灯片都是包含幻灯片文件名的文档,幻灯片预览缩略图的文件名,以及包含可搜索标记词的数组,可以非常快速地查询特定的幻灯片组。该查询将返回一组匹配的幻灯片,这些幻灯片可以循环以将每个幻灯片缩略图添加到GUI库中。用户创建的"组"可以是单个集合,其中在创建组时创建集合,根据需要在集合中添加/删除幻灯片,并且可以在删除组时销毁集合。这也将允许永久存储,因为数据库及其集合将在打开和关闭程序之间保持不变。
我的问题是,我是否可以使用MongoDB(通过pyMongo)以良好的性能执行以下操作:
根据需要创建和删除集合 - 将主集合中的特定文档复制并删除到新创建的集合中 - 在与每个文档关联的动态数组中以字符串格式存储可搜索标记的数组 - 基于存储在每个文档内的数组中的单个标记词,在集合中查询幻灯片 - 在系统关闭和打开/关闭程序之间保持数据库。
谢谢!
答案 0 :(得分:0)
您的帖子的观点和问题引用如下。我的评论遵循每个引用。
通过拥有一个数据库,其中每张幻灯片都是包含幻灯片文件名的文档,其中包含预览缩略图的文件名。 幻灯片和包含可搜索标记词的数组,一个就可以了 快速查询特定的幻灯片组。
听起来不错。我假设幻灯片在一个集合中。
用户创建的"群组"可以是个人收藏,其中一个 创建组时创建集合,幻灯片是 根据需要从集合中添加/删除,集合可以 删除组时销毁。
我建议你不为每个组创建一个集合。您最终可能会有数百或数千个集合来代表"群组"。如果你决定要引入Sharding(这可能只在一个集合上完成),这可能会让你不知所措。考虑为" groups"创建一个集合。它将包含与该组关联的唯一用户ID。
[我能否使用具有良好性能的MongoDB]来创建 并根据需要删除馆藏?
不断创建和删除集合并不是一个好的设计。你可能不需要这样做。如果您对RDBMS有任何熟悉,那么集合类似于表。你会不断创建数十/数百/数千个表吗?可能不是。
[我是否可以使用具有良好性能的MongoDB]复制和 将主集合中的特定文档删除为新创建的 集合
是的,可以从一个集合中获取数据并将其保存到另一个集合中。删除文档也非常容易和高效。 (索引是你的朋友。)
[我是否可以使用具有良好性能的MongoDB]来存储 动态数组中字符串格式的可搜索标记数组 与每个文件相关联?
是。 MongoDB非常擅长这一点。
[我能否使用具有良好性能的MongoDB进行查询] 基于存储在一个标签中的单个标签字在集合中的幻灯片 每个文档中的数组?
是。体面的表现将取决于您的收藏规模,更重要的是,相关指数的存在。
[我能否使用具有良好性能的MongoDB进行维护] 系统关闭和打开/关闭之间的数据库 程序
我假设您指的是复制和故障转移。如果是这样,是的,MongoDB很好地支持了这一点。