- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚进入图形数据库,我似乎一直遇到问题,决定是使用“ inode ”还是“索引属性”来跟踪诸如“节点类型”之类的内容。由于到目前为止我还没有真正的经验,我没有任何信息可以作为决定的依据,而且这两种方法似乎同样有效。
所以,问题是:两种方法之间的权衡是什么,规模(即节点数量)如何影响决策?
对于示例场景,假设有两种类型的“事物”:User
和 Product
,而 User 节点和 Product 节点之间的边并不那么重要,但我们关心的是我们是否想要 type: User
和 type: Product
每个节点上的属性,或者如果我们希望每个节点都有一条边指向 User
节点和 Product
节点,分别。
在什么情况下哪种方法更好?
注意:我特别关注 Neo4j 和 Titan,但我认为这也将更普遍地适用。
最佳答案
首先,你需要问自己:顶点/节点的类型是否需要被索引?即您是否需要按类型检索顶点/节点,比方说,从图中检索所有“用户”顶点,还是需要回答从检索给定类型的所有顶点开始然后进一步过滤/处理这些顶点的查询?
如果这个问题的答案是是 ,那么我建议您将该类型存储为已编入索引的字符串属性。或者,如果您使用基于 jvm 的语言进行开发,您可以定义一个类型枚举并将其用作属性类型,以实现更多类型安全和自动错误检查。 Titan 支持任意用户定义的类/枚举作为属性类型,并将压缩它们以减少内存占用。
但是,这种方法的缺点是无法扩展,因为您正在构建低选择性索引。这意味着可能会有很多“用户”或“产品”类型的顶点,所有这些都需要分别与“用户”或“产品”的索引条目相关联。这使得维护和查询此索引非常昂贵且难以扩展(想象一下 Facebook 有一个“类型”索引:“照片”条目下将有数十亿个顶点)。如果您(还)不关心缩放,那么这可以工作。
如果问题的答案是否 ,然后我建议将类型建模为图中的顶点/节点。即有一个“用户”顶点和一个“产品”顶点以及从每个用户到“用户”顶点标记为“类型”的边,等等。
这种方法的优点是您可以使用图形对数据进行建模,而不是让数据库外的字符串值代表关键类型信息。在您构建应用程序时,图形数据库将成为其核心组件并持续很长时间。随着编程语言和开发人员的来来去去,您不希望数据建模和类型信息随之而来并面临这样的问题:“SPECIAL_USER 是什么意思?”相反,有一个 SPECIAL_USER 顶点并向其添加出处信息,即谁创建了这种类型,它代表什么以及一个简短的描述——所有这些都在数据库中。
这种方法的一个问题是,随着应用程序的扩展,“用户”和“产品”顶点会有很多边缘事件。换句话说,您正在创建会产生扩展问题的 super 节点。这就是 Titan 引入单向边概念的原因。单向边就像网络上的链接:起始顶点指向另一个顶点,但该顶点不知道该边。由于您不想从“用户”顶点遍历到所有用户顶点,因此您不会失去任何东西,而是获得了可扩展性和性能。
关于database-design - 为什么在图形数据库中 inode 或索引属性会更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12754619/
我可以查看 linux 内核的 inode 结构中的哪些值来判断我当前正在查看的 inode 是目录还是常规文件? 我已经搜索了 inode 但似乎真的找不到一个看起来像我想要的成员,因为我使用的是旧
我试图了解 inode 位图和 inode 表之间的区别(来自 ext2 文件系统文档),但我不明白。谁能解释一下? 最佳答案 位图只占一个 block ,是一个0和1的序列,其中0表示对应的inod
我们使用 Amazon EBS 在 3 级目录结构中存储大量小文件 (<10KB)。 ~/lists# df -hFilesystem Size Used Avail Use
我正在创建一个简单的 debugfs里面的文件/sys/kernel/debug/test/testFile使用以下代码: pDebugfs = debugfs_create_dir(name, NU
我的 VPS (CentOS 6.3.8.13 Parallels Plesk Panel) 已达到 inodes 限制: [root@vps21157 tmp]# df -i Filesystem
我阅读了 minix 的 API,但仍然感到困惑,无法仅通过 inode 编号获得“真正的”inode 结构 我们只能用“stat”结构得到“inode number”,对吧?但是得到这个数字后,有没
我发现在大多数情况下,i_data 只是 i_mapping 的解引用数据,如下所示,为什么在一个 inode 结构中设置两个相同的值? crash> struct inode ffffffc073c
我想知道为什么以下代码无法工作: public static List cloneList(List list) { List result = new ArrayList(list.siz
我需要用 C/C++ 编写一个程序,要求用户输入一个 inode 编号,然后返回所有 inode header 字段和信息。我对linux系统和命令一点都不熟悉。我找到了一些命令并尝试了不同的东西,但
由于我们的文件系统实现仅将 inode 存储在内存中,因此我们不想浪费更多的 inode 缓存。 在VFS下,我们计划不将新的inode添加到inode cache hash talbe中,也不将其添
代码是: void ext2_read_inode (struct inode * inode) { struct buffer_head * bh; struct ext2_inod
根据 struct ext4_inode { ..... __le16 i_extra_isize; ..... } 鉴于我使用的 inode 大小 = 256 字节,我看到这可以用于存
我正在阅读有关第 6 版 unix 的文章,并且刚刚了解了 inode。我有以下问题: 假设我在一个目录中有一个文件,并且在其他地方有一个指向该文件的链接。我是否正确地说,如果我删除文件,inode
我了解文件描述符是用于识别文件的内核句柄,而文件的 inode 编号是指向具有有关文件的其他详细信息的结构的指针(如果我错了,请纠正我)。但我无法区分它们。 最佳答案 根本区别在于,inode 代表文
Linux 上的 inode 限制是按子目录还是按整个文件系统?我使用 ububtu 64 位服务器 9.10。 如果是目录限制,是否可以通过将文件拆分为多个子目录来解决 inode 限制? 最佳答案
我知道unix系统中的文件是由它们的inode来表示的。 作为用户,我可以访问这些值并更改它们吗? 也就是说,替换两个相邻 block 之间的值,这样就改变了文件? 我可以只覆盖中间的一个 block
因此,我的托管服务对我的服务器( inode )上的 INODES 有限制。每个目录/文件 = 1 个 INODE。这可能是将来的一个问题,因为我想在我的网站中实现文件共享。理论上我不能将文件数据存储
在 linux 上,ext4 分区上有一部电影,如果我打开电影并观看它,然后我移动或重命名电影。 在之前的缓存用完后,它需要从原始文件中读取更多的缓存,然后它仍然可以这样做。 问题是: 文件系统和 i
有人可以告诉我如何计算目录中文件的 inode 数量吗? 谢谢。 最佳答案 有一个inode每个目录,其中的每个文件一个。如果您对文件进行符号链接(symbolic link),则符号链接(symbo
我最近了解了 Unix inode 及其用途。特别是,我了解到 an.inode 在文件系统中是唯一的。 我的问题是:如果用户将 Micro SD 卡插入他们的 Android 设备,该卡会成为现
我是一名优秀的程序员,十分优秀!