当前位置: 首页 > 面试题库 >

JSON文档数据库中的键成本(mongodb,elasticsearch)

董子平
2023-03-14
问题内容

我希望有人对诸如mongodb或elasticsearch之类的文档存储数据库中的JSON密钥的大小具有速度或优化效果方面的经验。

因此,例如:我有2个文档

doc1: { keeeeeey1: 'abc', keeeeeeey2: 'xyz')

doc2: { k1: 'abc', k2: 'xyz')

假设我有1000万条记录,那么以doc1格式存储数据将意味着比以doc2存储更多的db文件大小。

除此之外,在速度或RAM或任何其他优化方面是否会带来不利或负面影响?


问题答案:

您正确地注意到文档将具有不同的大小。因此,如果您决定采用第二种模式,则将至少保存15 bytes每个文档(60%用于类似文档)。最终将以类似140MB您的10 million记录的形式出现。这将为您带来以下优势:

  • 节省硬盘空间。 唯一的问题是,从当前硬盘的价格来看,这几乎没有用。
  • 节省内存。 与硬盘相比,这对于索引编制很有用。在mongodb中,索引的工作集应适合RAM,以实现良好的性能。因此,如果您在这两个字段上都有索引,则不仅可以节省140MBHDD空间,还可以节省140MB潜在的RAM空间(实际上很明显)。
  • I / O 。由于输入/输出系统的限制,很多瓶颈都会发生(从磁盘读取/写入的速度受到限制)。对于您的文档,这意味着您可以使用模式2 twice as many documents每1秒读写一次。
  • 网络 。在许多情况下,网络甚至比IO还要慢,并且,如果您的DB服务器位于不同的机器上,则您的应用程序服务器的数据必须通过有线方式发送。您还可以发送两倍的数据。

在介绍了优点之后,我必须告诉您使用小键的缺点:

  • 数据库的可读性。 当您db.coll.findOne()看到并看到时{_id: 1, t: 13423, a: 3, b:0.2},很难理解这里到底存储了什么。
  • 应用程序的可读性 与数据库相似,但是至少在这里您可以找到解决方案。随着映射逻辑,其转换currentDatecpricep你可以写一个干净的代码,并有一个短暂的架构。


 类似资料:
  • Phinx 可以让开发者简洁的修改和维护数据库。 它避免了人为的手写 SQL 语句,它使用强大的 PHP API 去管理数据库迁移。开发者可以使用版本控制管理他们的数据库迁移。

  • 我有一个实体Market(Market存储在marketDb数据库中的集合中)引用Product(存储在productDb数据库中的集合产品中)。 /**市场在集合中存储为:*/ 当我尝试通过Id读取市场时,我能够获取市场,但产品返回为NULL。 然而:1。如果product存储在与Market属于同一数据库的集合中,则product将作为read on Market的一部分返回。2.如果在上述代

  • 问题内容: 我知道有三种不同的,流行的非SQL数据库类型。 键/值:Redis,Tokyo Cabinet,Memcached ColumnFamily:Cassandra,HBase 文件:MongoDB,CouchDB 我已经读了很长的博客,但对它的了解却很少。 我知道关系数据库,并且在MongoDB / CouchDB等基于文档的数据库中徘徊。 谁能告诉我这些和清单上的两个前者之间的主要区别

  • 大哉!敬虔的奥秘,无人不以为然,就是:神在肉身显现,被圣灵称义,被天使看见,被传于外邦,被世人信服,被接在荣耀里。(1 TIMOTHY 3:16) MongoDB数据库(1) MongoDB开始火了,这是时代发展的需要。为此,在这里也要探讨一下如何用Python来操作此数据库。考虑到读者对这种数据库的了解可能比关系型数据库陌生,所以,要用多一点的篇幅来介绍。 MongoDB是属于NoSql的。 N

  • 我想在firestore数据库中查询文档id。目前我有以下代码: 我没有结果。但当我查询其他字段时,它会起作用: 文档id的名称是如何调用的?

  • 问题内容: 我正在寻找生成类似的脚本: 主要问题是我找不到我需要的所有信息,例如以下查询: 返回有关所有键和索引的信息,但是..没有“列名称”,我在哪里可以得到它们? 我也尝试了sys.all_columns和sys.key_constraints。 问题答案: 列名称存储在和表中。 这将从所有表中选择列名称: 或与表联接,这将选择表名称和列: 您可以在语句中添加一个子句以对索引列进行过滤