Java 使用Solr搜索索引作为数据库-这是;“错了吗?”;?
我的团队正在与使用Solr作为搜索索引的第三方CMS合作。我注意到,作者似乎将Solr用作某种数据库,因为返回的每个文档都包含两个字段:Java 使用Solr搜索索引作为数据库-这是;“错了吗?”;?,java,mysql,database,solr,Java,Mysql,Database,Solr,我的团队正在与使用Solr作为搜索索引的第三方CMS合作。我注意到,作者似乎将Solr用作某种数据库,因为返回的每个文档都包含两个字段: Solr文档ID(基本上是类名和数据库ID) 整个对象的XML表示形式 因此,它基本上是对Solr进行搜索,下载对象的XML表示,然后从XML实例化对象,而不是使用id在数据库中查找对象 我的直觉告诉我这是一个糟糕的做法。Solr是一个搜索索引,而不是数据库。。。因此,对我来说,对Solr执行复杂的搜索,获取文档ID,然后从数据库中取出相应的行更有意义 当前的
编辑:当我说“XML表示法”时,我指的是一个存储字段,其中包含对象所有属性的XML字符串,而不是多个存储字段。这可能是出于性能原因,如果它不会引起任何问题,我将不去管它。传统数据库与solr索引之间存在很大的灰色地带。我觉得人们在UI展示中也会做类似的事情(通常是键值对或json而不是xml),只有在需要更新/删除时才从数据库中获取真实对象。但是,所有的读取都只需转到Solr即可。我见过类似的操作,因为它允许非常快速的查找。我们正在将数据从Lucene索引移动到快速键值存储中,以遵循DRY原则,同时减小索引的大小。对于这类事情没有硬性规定。将Solr用作数据库是完全合理的,这取决于您的应用程序。事实上,差不多就是这样 这本身绝对不是一个坏习惯。只有当你用错了它,就像其他任何级别的工具一样,即使是GOTOs,它才是糟糕的 当您说“一个XML表示…”时,我假设您所说的是有多个存储的Solr字段,并使用Solr的XML格式检索这些字段,而不仅仅是一个大的XML内容字段(这将是Solr的一个可怕的用法)。Solr使用XML作为默认响应格式的事实在很大程度上是不相关的,您也可以使用,因此它在这方面与传统关系数据库相当
最终,它取决于应用程序的需要。Solr主要是一个文本搜索引擎,但也可以作为许多应用程序的NoSQL数据库。是的,您可以将Solr用作数据库,但有一些非常严重的警告:
结论:即使您可以将SOLR用作RDBMS,您可能会发现(正如我所做的那样)最终“没有免费午餐”——超级酷的lucene文本搜索和高性能内存索引的成本节约,灵活性降低和采用新的数据访问工作流程通常会带来成本。将solar作为数据库添加到@Jayunit100响应中,您可以获得可用性和分区容差,但需要付出一定的一致性代价。在你写的东西和你能读回它的时间之间会有一个可配置的延迟