草庐IT

mysql - elastic search + couchdb 或 sphinx + mysql .... 用于文档审查 SaaS

coder 2023-10-25 原文

我有:

作为“加载文件”提供的一组预处理办公文档(Word、Excel、PDF、电子邮件、Power Point 等)(每组约 2-4 TB)

“加载文件”包括:

  1. 单页 pg tiffs(从办公文件打印.. 15 页的单词 医生会有 15 次争吵)
  2. 从 office 文档中提取的元数据显示在带分隔符的 .dat 文件中,其中包括全文。
  3. .log 文件与 .tiff 和 .dat 相关联(.dat 和 .log 文件放在一起约占数据集大小的 7-10%)
  4. 办公文件原件

通过浏览器的用户将:

  1. 在 .dat 中找到的全文和元数据中进行各种关键字搜索
  2. 查看 tiff 图像,偶尔查看原始 office 文档
  3. 用一些用户定义的标签对每个文档进行分类,有时做笔记
  4. 以多种方式对数据进行排序...例如发送日期、作者、主题等

尝试在以下两者之间做出决定: elastic search + couchdb 或 sphinx + mysql

我被告知搜索将是主要的工程问题,因此决定将其用作确定其他一切的基础。

考虑到 future 的发展,我想我会选择所有“云”。我输入了 Elasticsearch ,我读到它与 couchdb 很好地配对(除了宣传的与 ES 的紧密集成之外没有特别的原因)......以及 symfony2 + 学说(没有与这些结合,但读到它们与 ES 很好地配对)而不是 zend。

但后来有人评论说,数据看起来结构非常好,因此 sphinx/mysql 是一个更好的路径,因为 sphinx“开箱即用”按云节点拆分。

上下文:

我的主要目标是提高搜索速度和性能以及提供 tiff 图像。可扩展性是次要问题,因为用户数量可能会增长到数万……也许是 10 万,但不是“网络规模”(数千万)。然而,其中一些用户每天 8 小时都在使用该应用程序。

问题:

对于这个特定的应用程序,您是否觉得 Elasticsearch + nosql 是矫枉过正,因为它需要比我真正需要的更多的时间/复杂性/资源来配置,而没有显着的性能优势?或者 sphinx mysql 最终会成为更大数据集/更多用户的瓶颈吗?

最佳答案

旨在作为评论而不是答案......(虽然太长了)

我真的不能对 couchdb 发表评论,但我想我会分享我对 MySQL/Sphinx 的看法。

首先,即使使用复杂的标准,搜索速度也非常快。 索引的某些方面需要存储在 RAM 中。如果您拥有庞大的数据集,则需要为 Sphinx 分配足够的资源才能获得这种性能。

Sphinx 的一个潜在缺点是,根据我的经验,“开箱即用的 sphinx”只会在您的要求相当简单时发生。 如果您想在索引之前预处理文档(即在文档上运行正则表达式,替代论坛 bbcode 等),那么它会变得更加复杂(在我的例子中,我必须使用 XMLPIPE2 进行索引,而不是 Sphinx 直接与 mysql 对话)。

Sphinx 的另一个潜在问题是,虽然有实时索引,但它们还不是 (IMO) 成熟的功能,并且也有一些限制。 因此,您可能需要定期重新索引数据集(或者更可能的是,索引新的位,然后将它们合并到主索引中——称为 main + delta)。这不一定是个问题,但它又是一个动人的部分。

“我的主要目标是搜索的速度和性能”——Sphinx 在这里不会让您失望,而且它的扩展性很好。

关于mysql - elastic search + couchdb 或 sphinx + mysql .... 用于文档审查 SaaS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9304105/

有关mysql - elastic search + couchdb 或 sphinx + mysql .... 用于文档审查 SaaS的更多相关文章

  1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  2. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  3. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  4. ruby - inverse_of 是否适用于 has_many? - 2

    当我使用has_one时,它​​工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290

  5. Matlab imread()读到了什么 (浅显 当复习文档了) - 2

    matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1

  6. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

  7. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  8. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  9. ruby-on-rails - Sphinx - 何时对字段使用 'has' 和 'indexes' - 2

    我几天前在我的ruby​​onrails2.3.2上安装了Sphinx和Thinking-Sphinx,基本搜索效果很好。这意味着,没有任何条件。现在,我想用一些条件过滤搜索。我有公告模型,索引如下所示:define_indexdoindexestitle,:as=>:title,:sortable=>trueindexesdescription,:as=>:description,:sortable=>trueend也许我错了,但我注意到只有当我将:sortable=>true语法添加到这些属性时,我才能将它们用作搜索条件。否则它找不到任何东西。现在,我还在使用acts_as_tag

  10. ruby-on-rails - 使用 Rails 2.3.5 运行 Thinking Sphinx 时出现问题 - 2

    我刚刚安装了Sphinx(发行版:archlinux)并下载了源代码。然后我为Rails安装了“ThinkingSphinx”插件。我关注了officialpagesetup和thisScreencastfromRyanBates,但是当我尝试为模型建立索引时,出现了这个错误:$rakethinking_sphinx:index(in/home/benoror/Dropbox/Proyectos/cotizahoy)Sphinxcannotbefoundonyoursystem.Youmayneedtoconfigurethefollowingsettingsinyourconfig/

随机推荐