首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >命名键与数字键- mongo

命名键与数字键- mongo
EN

Stack Overflow用户
提问于 2014-01-27 05:22:26
回答 3查看 2.5K关注 0票数 2

假设我们有一个单独用于缓存的Mongo实例。集合只是以下几个数组的转储

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
_id
key
value
expiration

不过,我们项目组的人。把它当作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
_id
0
1
2

我们的后端(PHP)知道0= "key",1= "value",2=“期满”。他说:“最好这样做,所以我们不会在蒙古族的每一张唱片里都存储一个长密钥名。”

这对我来说是有意义的,因为每个文档都是单独存储的。然而,使用任何管理工具或试图在应用程序之外操作我们的数据几乎是不可能的。就像看1和0一样。所以我去测试了一下。

我做了一个小蒙古语集合命名的钥匙和数字。做完这件事之后。我对他们两个都运行了一个db.foo.stats()

他们匹配的每一个统计数据。所以我想我的问题是。如果我们有一个名为VeryLongKeyDescriptiveText的密钥,并将其存储在1000个记录中。这与存储0的物理大小和相应的值相同吗?(我的测试结果是肯定的,但我不明白蒙戈是怎么做到的)。

我的测试是两个集合(控制和测试)。使用以上两个键值设置。每个集合当前有3个文档,其中包括一个名称、一些base64 loren文本和一个到期的Unix时间戳。这两个集合都有相同的确切数据,除了测试中的键是(0,1,2)而不是(键,值,到期)。以下是stats()的两个输出:http://pastebin.com/tTt7VzwQ

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-13 10:13:36

如果扩展测试用例以创建更大的文档,存储差异就会变得更加明显。请考虑以下几点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function createIntFields(j) {
  var document = {};
  for (i = 0; i < j; i++) {
    document[i] = i;
  }
  return document;
}

function createStringFields(j) {
  var document = {};
  for (i = 0; i < j; i++) {
    document["thisIsAVeryLongFieldNamePrefix" + i] = i;
  }
  return document;
}

db.int.drop();
for (i = 0; i < 1000; i++) { db.int.insert(createIntFields(i)); }

db.string.drop();
for (i = 0; i < 1000; i++) { db.string.insert(createStringFields(i)); }

统计数据确实有很大不同(我删除了一些无关的输出字段):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> db.int.stats();
{
    "ns" : "test.int",
    "count" : 1000,
    "size" : 9395008,
    "avgObjSize" : 9395,
    "storageSize" : 11182080,
    "numExtents" : 6,
    "lastExtentSize" : 8388608
}
> db.string.stats();
{
    "ns" : "test.string",
    "count" : 1000,
    "size" : 32098752,
    "avgObjSize" : 32098,
    "storageSize" : 37797888,
    "numExtents" : 8,
    "lastExtentSize" : 15290368
}

为了解释您看到的小文档大小,我们可以参考Mathias的存储内部表示,特别是滑梯#25。每个记录(例如,本例中的文档)对于记录长度、范围和next/prev指针有16字节的开销。此外,文档的最小有效负载为32字节.因此,即使我们用非常小的文档填充一个集合:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.foo.drop();
for (i = 0; i < 1000; i++) { db.foo.insert({_id:i}); }

统计数据显示,平均文档大小为48:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> db.foo.stats()
{
    "ns" : "test.foo",
    "count" : 1000,
    "size" : 48032,
    "avgObjSize" : 48,
    "storageSize" : 172032,
    "numExtents" : 3,
    "lastExtentSize" : 131072
}

当文档有效负载超过32字节时,二人的力量分配就开始了,所以您仍然可以看到以圆形块分配的文档。在我的一些测试中,我注意到112是一个共同的平均大小(96 + 16)。

票数 2
EN

Stack Overflow用户

发布于 2014-01-27 06:06:19

的确,这两种观点在数据库大小上的差异通常不成比例,实际上,在短字段名和长字段名之间的1000条记录中,可能只有1MB的差异。

有时,如果您一致地使用长字段名,并且它们相当长,您将开始看到真正的问题。

对此问题的识别也可以与文档内容大小联系起来。我的意思是,如果你的文件已经很大了,那么你不会注意到太多的变化。

他们匹配了所有的数据。

我要说的是,幸运的是短字段名与长字段名的大小相同。

你确定数据是相同的,除了一个有短和一个有长字段名吗?

我实在看不出expiration2的大小在物理上是如何可能的,我可以看到key0是如何相对相同的字节数的。

票数 3
EN

Stack Overflow用户

发布于 2014-01-27 05:32:44

我的第一个想法是,他们已经实现了字段名的压缩或标记,但问题似乎仍未解决(截至2014年1月)。由于填充的缘故,它们的尺寸可能是一样的。由于性能原因,集合中的文档是填充的,因此它们通常可以在不需要移动的情况下进行适当的调整。您可以在没有任何填充的情况下尝试压实集合,以查看您现在是否看到了差异。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21382031

复制
相关文章
RESTful风格的应用
@RestController:简化开发过程。不需要在方法上额外添加@ResponseBody
Breeze.
2022/09/23
2880
RESTful风格的应用
本节讲解一个全新的话题,RESTful开发风格。 REST :全称Representational State Transfer(表现层状态转换),资源在网络中,以某种表现形式进行状态转移。听起来很难理解,其实说白了就是在我们web环境下,如果你要获取某个图片,js,网页这些资源的时候,就要以url的形式进行表现。我们访问一个图片的网址,那这个资源返回的就自然是一张图片,如果访问的是一个CSS,那返回的就是一个CSS。好像这种设计理念对于我们的web应用来说是在再基础不过的东西。其实这是rest给我们提出来的一个设计理念,在web环境以URL的方式,来进行资源的传递。那么基于这种REST的理念,注意,是理念,不是具体的实现。
害恶细君
2022/11/22
6390
RESTful风格的应用
python风格——动态类型
想要写出python风格的代码,就得理解python的特点,合理的应用python所带来的东西。 python是一门动态类型的语言,这是由python的设计思想所决定的。在python中,我们编写对象接口而不是类型。我们关心的是一个对象能做什么,而不是关心它是什么。它是什么并不重要,重要的是它能做什么?我们希望代码能自动的适应非常多的类型,任何具有兼容性的接口对象能够正常工作。实际上这就是多态(多态:指为不同数据类型的实体提供统一的接口),这也是使用python的核心思想之一。
zy010101
2021/06/09
5920
动态代理原理及在 Android 中的应用
因为一个静态代理类只能服务一种类型的目标对象,在目标对象较多的情况下,会出现代理类较多、代码量较大的问题。
trampcr
2019/11/04
2.2K0
动态 | 伯克利最新研究:GANs在字体风格迁移上的应用
AI科技评论按:怎样能快速生成风格相同的字体呢?伯克利 AI 研究院最新发表的一篇博客告诉你他们最新的研究。 左:给出的电影海报,右:由MC-GAN生成的新电影片名 文字是平面设计中很突出的视觉元素。
AI科技评论
2018/03/30
9310
动态 | 伯克利最新研究:GANs在字体风格迁移上的应用
android变化HOLO对话风格
andriod风修改对话框格,通过设置theme实现。一些要素需要通过Java代码更改,下面的对话框更改的步骤的例子称号。
全栈程序员站长
2022/07/06
3450
REST风格的应用程序实现
莫笑我老土,因为我确实是最近才听说REST风格的,以前就是觉得 /category/product/pid
大江小浪
2018/07/25
3620
android中的深度学习——快速风格迁移
额,最近忙着答辩,先上一个效果图吧,把坑先占了。毕设完了之后有时间再写。 处理前 处理后
何时夕
2018/06/14
6120
半圆型动态仪表盘风格图表
▼ 下午在浏览论坛的时候,刚好看到秋叶老师的一个图表教程,风格是半圆型饼图,用VBA控制。 查看了一下后台的VBA代码,有点小复杂,不过勉强能看懂,自己试了一把,确实可行。 Sub 动起来()
数据小磨坊
2018/04/10
2.2K0
半圆型动态仪表盘风格图表
[解读REST] 4.基于网络应用的架构风格
衔接上文[解读REST] 3.基于网络应用的架构,上文介绍了一组自洽的术语来描述和解释软件架构;如何利用架构属性评估一个架构风格;以及对于基于网络的应用架构来说,那些架构属性是值得我们重点关注评估的。本篇在以上的基础上,列举一下一些常见的(REST除外)的适用于基于网络应用的架构风格,并使用对比架构属性的方式对其进行评估。 1 架构风格所产生的架构属性 架构设计的目的是为了满足或者超出应用的需求,而不是为了创造出一种特殊的交互拓扑或者一种特殊的设计方式。当设计一个系统时所选择的架构风格,必须与这些需求保持一
blackheart
2018/01/19
8140
Android应用防止so注入防止动态调试参考代码
由于公司应用需要过安全测试,测试那边说有so注入漏洞,所以找到了这份代码,并成功通过测试。
用户1696846
2023/08/25
6830
Android的动态加载插件
我们都知道要获Res下的文件,需要用Resource对象,但是apk是未安装的,宿主并没有对应的resId,因此获取资源需要进行反编译,反编译需要对应的插件的包名,就是反编译R资源。 贴代码,举个例子: 插件管理器类
包子388321
2020/06/16
1.9K0
Android旁门左道之动态替换应用程序
本文讨论了Android类加载器的两种分类,以及它们的区别和联系。作者详细介绍了双亲委托模型以及自定义类加载器的工作原理。通过示例代码,作者展示了如何通过自定义类加载器解决一些类加载器无法解决的问题,包括动态替换系统类、实现自定义视图、以及解决一些系统类加载器带来的问题。
MelonTeam
2018/01/04
2.3K2
Android旁门左道之动态替换应用程序
Android应用防止so注入防止动态调试参考代码
由于公司应用需要过安全测试,测试那边说有so注入漏洞,所以找到了这份代码,并成功通过测试。
用户1696846
2019/12/30
3.7K0
【Android 逆向】逆向修改游戏应用 ( 分析应用结构 | 定位动态库位置 | 定位动态库中的修改点 | 修改动态库 | 重打包 )
分析上一篇博客 【Android 逆向】逆向修改游戏应用 ( APK 解析工具 | 解包 -> 分析 -> 重打包 -> 签名 流程 ) 解包后的文件 ;
韩曙亮
2023/03/29
9270
【Android 逆向】逆向修改游戏应用 ( 分析应用结构 | 定位动态库位置 | 定位动态库中的修改点 | 修改动态库 | 重打包 )
深度学习应用:iOS 上的图像风格迁移
图像风格迁移,用 python 就可以实现,如果想要在手机上面(不联网)查看效果怎么办呢?
iOSDevLog
2019/02/20
1.1K0
动态代理的实际应用
最近在用 Python 的 SQLAlchemy 库时(一个类似于 Hibernate 的 ORM 框架),发现它的 Events 事件还挺好用。
crossoverJie
2022/10/27
4340
动态代理的实际应用
Android动态权限
MelonTeam
2018/01/04
1.5K0
Android动态权限
点击加载更多

相似问题

针对不同风格的Android应用的动态应用流程

10

android动态改变风格

30

Android应用程序风格

11

Android -设置应用主题(风格)

11

Angular 4如何应用动态风格?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文