【发布时间】:2011-07-27 19:43:26
【问题描述】:
我们需要控制生产 solr 索引中的数据,并且我们需要它与新开发兼容。理想情况下,我们希望在本地机器上模拟索引,使用它进行查询 solr 并编写单元测试来查询它以加快迭代速度。
RamDirectory is used in another question 做类似的事情,但问题是从 2 年前开始的。这个example 似乎就是这样做的(使用 FSDirectory 而不是 RamDirectory)。这些是解决这个问题的正确方法吗?有没有更好的方法来做到这一点?
我们想编写如下测试:
setup mock index;
query mock index;
assert(stuff that should be true);
teardown mock index;
编辑:其他详细信息:
我们的想法是我们会建立一个索引,有一种简单的方法来添加文档,而不需要索引器和系统的其余部分,除了我们可以保留在版本控制中的本地数据库。过去我们生成一个索引,当出现不兼容时,我们重新生成它。
如果我们重新索引,我们会增加很多开销,并且模拟索引器似乎不是一个好的选择,因为我们的索引器包含大量数据处理逻辑(比如将数据添加到来自一个分贝)。我们的索引器连接到外部数据库,因此我们也需要支持它。我们可以有一个如上所述的本地测试数据库,它几乎没有开销。
一旦我们有一个测试数据库,我们需要建立一个索引,然后我们可以离开second link above。问题变成了我们如何真正快速地构建索引以进行测试,比如 1000 个文档。
问题是我们需要保持本地数据库架构与生产架构同步。生产模式经常变化,这是一个问题。我们希望有一个足够灵活的测试基础架构来处理这个问题——目前的方法是每次都重建数据库,这很慢而且会惹恼其他人!
【问题讨论】:
-
您使用的是什么数据库...我猜是它的 MySQL,它因备份和恢复速度慢而臭名昭著。因此,我们切换到 Postgresql。 SQLServer 还具有快速备份/恢复功能。
-
甲骨文,它已经很优化了
-
我们今天讨论了这个问题,一种可能性似乎只是在数据库上执行 SELECT * 并将其加载到哈希中,这样本地就不会出现架构问题。列几乎永远不会被删除,如果列丢失/未指定(用于创建文档),单元测试应该可以正常工作。
-
是我还是 oracle 恢复也需要很长时间?
-
哈哈,幸运的是,我并没有以任何方式与 db 端有任何关系,无论好坏,它都保持预言机(并且出于我无法控制的原因)
标签: unit-testing testing lucene solr ramdirectory