问题标签 [in-memory-database]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1229 浏览

java - 在 Java 应用程序中查询一组内存对象的技术

我们有一个系统通过调用另一个系统上的接口来执行“粗略搜索”,该接口返回一组 Java 对象。一旦我们收到搜索结果,我需要能够根据描述属性状态的某些标准进一步过滤生成的 Java 对象(例如,从初始对象返回 xy > z && ab == c 的所有对象)。

每次用于过滤对象集的标准部分是用户可配置的,我的意思是用户将能够选择要匹配的值和范围,但他们可以从中选择的属性将是一个固定的集合。

对于每次搜索,数据集可能包含 <= 10,000 个对象。搜索将由应用程序用户群手动执行,每天可能不超过 2000 次(大约)。值得一提的是,结果集中的所有对象都是已知的域对象类,它们具有描述其结构和关系的 Hibernate 和 JPA 注释。

可能的解决方案

在我的脑海中,我能想到 3 种方法:

  1. 对于每次搜索,我们的数据库中都会保留初始结果集对象,然后使用 Hibernate 使用更细粒度的条件重新查询它们。
  2. 使用内存数据库(例如 hsqldb?)来查询和优化初始结果集。
  3. 编写一些自定义代码来迭代初始结果集并提取所需的记录。

选项1

选项 1 似乎涉及通过网络到物理数据库 (Oracle 10g) 的大量往返,这可能会导致大量网络和磁盘活动。它还需要将每次搜索的结果与其他结果集隔离,以确保不同的搜索不会相互干扰。

选项 2

选项 2 原则上似乎是一个好主意,因为它允许我在内存中进行更精细的查询,并且不需要保留结果数据,这些数据只有在搜索完成后才会被丢弃。直觉是,这也可能非常高效,但可能会导致更大的内存开销(这很好,因为我们可以在 JVM 获得的内存量上非常灵活)。

选项 3

选项 3 可能非常高效,但我想避免这种情况,因为我们编写的任何代码都需要如此仔细的测试,以至于实现足够灵活和健壮的东西所花费的时间可能会令人望而却步。


我没有时间对所有 3 个想法进行原型制作,所以我正在寻找人们可能对上述 3 个选项的评论,以及我没有考虑过的任何其他想法,以帮助我决定哪个想法可能最合适。我目前倾向于选项 2(在内存数据库中),因此也很想听听有在内存中查询 POJO 经验的人的意见。

希望我已经足够详细地描述了这种情况,但不要犹豫,询问是否需要任何进一步的信息才能更好地理解这种情况。

干杯,

埃德

0 投票
11 回答
10613 浏览

database - 为什么有人需要内存数据库?

我读到一些数据库可以在内存中使用,但想不出为什么有人会想要使用这个特性。我总是使用数据库来持久化数据和内存缓存以实现快速访问。

0 投票
6 回答
42040 浏览

python - Python中的内存数据库

我正在用 Python 对一个大型数据库进行一些查询,以从数据库中获取一些统计信息。我希望这些统计信息在内存中,以便其他程序可以使用它们而无需访问数据库。

我在考虑如何构造它们,在尝试设置一些复杂的嵌套字典后,我意识到一个好的表示方法是 SQL 表。不过,我不想将数据存储回持久数据库。是否有任何支持使用 SQL 语法查询数据的 SQL 数据库的内存实现?

0 投票
3 回答
463 浏览

wcf - 从内存中插入和查询数据的最佳实践

我们有一个应用程序可以获取实时数据并将其插入数据库。它每天在线 4.5 小时。我们在 17 个表中逐秒插入数据。用户可以随时查询任意表的最新秒数据和历史记录...

处理提要和插入是使用 C# 控制台应用程序完成的...

处理用户请求是通过 WCF 服务完成的......

我们发现插入是我们的瓶颈;大部分时间都在那里。我们投入了大量时间尝试微调表格和不雅点,但结果并不令人满意

假设我们有足够的内存,将数据插入内存而不是数据库的最佳实践是什么。目前我们正在使用每秒更新和插入的数据表 我们的一位同事建议在 feed-handler 和 WCF user-requests-handler 之间使用另一个 WCF 服务而不是数据库。WCF 中间层应该是基于 TCP 的,它将数据保存在自己的内存中。有人可能会说,提要处理程序可能会处理用户请求,而不是在 2 个进程之间有一个中间层,但我们想要分开,所以如果提要处理程序崩溃,我们仍然希望能够为用户提供当前记录

我们的时间是有限的,我们想在短时间内把一切都移到记忆中。在 2 个进程中间有一个 WCF 是一件坏事吗?我知道请求会增加一些开销,但是所有这 3 个进程(feed-handler、内存数据库(WCF)、用户请求处理程序(WCF)都将在同一台机器上,带宽不会那么多的一个问题。

请协助!

0 投票
1 回答
279 浏览

csv - HSQLDB:关闭连接后删除所有创建的文件的简单方法?

我有一个应用程序/工具,它从 CSV 文件读取并写入另一个文件,使用 HSQLDB 处理它。

我希望将 CSV 文件作为唯一的输出,并且数据库文件应该在进程完成后消失。

  • 我尝试使用mem存储,但这会阻止 HSQLDB 写入 CSV 文件。
  • 我还尝试在关闭连接之前 DROP SCHEMA ,但这不会删除文件。
  • 我不喜欢手动删除文件,因为这是特定于 HSQLDB 实现的,并且会随着时间而改变。

是否有一些系统方法可以只保留 CSV 文件?理想情况下,我想要一些允许 HSQLDB 在使用内存存储时写入 CSV 文件的选项。

0 投票
4 回答
2353 浏览

database - 内存数据库如何提供持久性?

更具体地说,是否有任何数据库不需要辅助存储(例如 HDD)来提供持久性?

注意:这是我之前的问题的跟进

0 投票
1 回答
507 浏览

sqlite - 内存/嵌入式数据库解决方案

我目前正在使用 SQLite 的 in-memory 选项,虽然它可以工作(现在有点慢,但我仍在探索优化我对它的使用的方法,比如批处理等),我只是好奇是否还有其他支持内存数据库并且是嵌入式解决方案的 SQLite 的替代品。我不一定需要基于模式的数据库(NoSQL 将是一个有趣的尝试)。我确实写比读更频繁(这是 Web 应用程序后端的一部分),所以我需要我的更新足够快以跟上传入的数据流。

我相信 SQLite 可能通过在查询端进行一些优化来处理卷,但我只是想知道替代方案。

0 投票
3 回答
11738 浏览

java - 简单可靠的内存数据库,用于支持 JPA 的快速 Java 集成测试

如果我使用内存数据库而不是 PostgreSQL,我的集成测试会运行得更快。我使用 JPA (Hibernate),我需要一个内存数据库,它可以轻松切换到使用 JPA、易于设置且可靠。它需要相当广泛地支持 JPA 和 Hibernate(如果你愿意,也可以反过来),因为我不想采用我的数据访问代码进行测试。

鉴于上述要求,什么数据库是最佳选择?

0 投票
5 回答
19926 浏览

python - 在 django 中,如何从初始化脚本中调用子命令“syncdb”?

我是 python 和 django 的新手,在学习Django Book时,我了解了为我生成数据库表的命令“python manage.py syncdb”。在开发环境中,我在内存数据库中使用 sqlite,所以每次我重新启动服务器时它都会自动删除。那么如何编写这个“syncdb”命令的脚本?(应该在“settings.py”文件中完成吗?)

澄清

OP 正在使用内存数据库,该数据库需要在使用针对该数据库定义的 Django 模型的任何进程开始时进行初始化。确保数据库初始化(每个进程启动一次)的最佳方法是什么。这将用于通过manage.py runserver或通过网络服务器进程(例如使用 WSGI 或 mod_python)运行测试或运行服务器。

0 投票
1 回答
3456 浏览

unit-testing - 使用 PDO Sqlite 内存数据库进行 PHPUnit 测试

我最近让 PHPUnit 与 xDebug 一起测试我的 Zend Framework 应用程序。我使用 ZF 的事实不应该对这个问题产生任何影响——只是为了完整性而提到它。

无论如何,一切正常,但现在我想使用 PDO SQLite 建立一个内存数据库。我已经成功地完成了这项工作,并创建了表格并插入了数据。然而,这项任务似乎需要很长时间,我的 Export 语法与 SQLites 的需求不匹配,所以我不得不玩一会儿。

SQLite 也不支持我的应用程序使用的约束(对吗?),所以如果我无法测试我的约束,整个过程似乎是在浪费时间。

使用 SQLite 是解决我问题的正确方法吗?有没有人有更好的方法来使用它或任何其他 DB 解决方案来进行单元测试?