尝试在没有 Tomcat 的情况下启动 db orient,并验证这一点:
设置索引
在用于过滤查询中的数据的字段上使用索引,这将导致改进。在 OrientDB 中有多种类型的索引,每种索引在某些情况下都有优势index。因此,索引选择取决于您的情况。在我的测试中,我使用了“SB-TREE”。
验证 ORIENTDB 进程占用的 RAM
使用默认设置(OrientDB autoconfig DISKCACHE = 5.064MB(heap = 455MB),上传具有 3 个属性(id、name、city)的 Person 类的 100,000 个顶点,我有以下内存值:
- 大小 db = 80 MB
- 查询 =
SELECT COUNT(@rid) FROM Person WHERE id >= 0
- 时间查询执行 =(冷)3.57 秒。(热)1.88 秒。
- 验证查询使用了索引 =
explain SELECT COUNT(@rid) FROM Person WHERE id >= 0
并检查“involvedIndexes”列下是否有您创建的索引(在我的情况下为 [“Person.id”])
- OrientDB 进程(打开工作室)= 442 MB(命令:ps -ef | grep orient你得到 idprocess,然后:top -pYOUR_ID)
时间查询:
索引使用:
orientdb 进程使用的内存
增加堆/磁盘缓存
如果您有“内存不足”,您可以尝试增加堆:
- 在 orientdb 所在位置的 /bin 文件夹中打开文件 Server.sh(适用于 linux)或 server.bat(适用于 windows)。
- 设置 MAXHEAP = -Xmx2048m
如果在使用索引增加缓存后查询仍然很慢:
- MAXDISKCACHE = "- Dstorage.diskCache.bufferSize = 8192 FOR 8GB"
显然,堆值和缓存取决于系统上有多少 RAM。它考虑到使用 Ram 增加太多对于操作系统来说已经饱和,而且更多只会带来缺点。
如果没有运行 Tomcat,您是否仍然“内存不足”或者 count() 将返回值(足够快)?
如果到目前为止一切顺利,您可以启动 Tomcat 并查看它在 2 个进程(oriendb 和 tomcat)处于活动状态时如何表现 RAM。如果未饱和,请尝试使用 count() 重新运行查询。让“失忆”?使用活动的 tomcat,您应该尝试重新设置内存以使其对 Tomcat 和 OrientDB 都足够。(还要考虑操作系统使用的 ram)。
编辑
正确的方法是,如果您已经知道类中必须存在哪些属性,则立即创建该属性并在每个属性上创建其相对索引。这样,当您添加顶点时,索引会在输入后自动更新。因此,当您运行查询时,您确定 where 子句中的过滤器将使用索引。