- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
对于一个新项目,我希望结合使用 MySQL、Sphinx 和 MongoDB。 MySQL 用于关系数据和数值搜索,Sphinx 用于自由文本搜索,MongoDB 用于地理数据。就我的(快速)基准测试而言,MongoDB 是地理查询最快的,sphinx 是自由文本搜索最快的,而 MySQL 是关系数据搜索最快的。因此,为了获得最佳性能,我可能必须将它们组合到我的项目中。
然而,这有三个缺点。
所以问题是我应该将这三者结合起来,省去一个(可能是 MongoDB 并使用 Sphinx 处理地理数据)还是只使用一个(MongoDB 或 MySQL)?
为了了解数据,关系数据约为 6GB,地理数据约为 4GB,自由文本数据约为 16GB。
最佳答案
不太了解 3 个数据库中包含的记录/集合/文档是否具有数据库间引用。 EG如果用户名、职位、电话号码在Mysql中,用户地址在Mongo中。我假设答案是肯定的。
恕我直言,不推荐使用 3 种不同的存储解决方案,因为:
1)(最重要的)您不能聚合来自 2 个数据库的数据(以可扩展的方式)。
例子:假设您将用户数据(用户名)保存在 Mysql 中,将用户地理坐标保存在 Mongo 中。您不能查询对位于两个数据库上的字段进行过滤器/排序。例如,您不能:
SELECT all users
WHERE name starts with 'A'
SORT BY distance_from_center
同样适用于 Sphinx。
解决方案:您要么限制在单个数据库上可用的数据,要么将数据从一个数据库复制/镜像到另一个数据库。
2)维护成本:维护3台服务器,不同的备份/冗余策略,不同的扩展策略;开发成本:开发者必须使用3个查询库,3种不同的查询方式等等。
3) 必须手动处理的不一致/同步问题(例如,你想在 mongo 和 mysql 中都插入数据;假设 mongo 写入了数据,但 mysql 引发了引用完整性异常,所以现在你有一个数据库之间不一致)
4)关于硬件成本,唯一吃RAM的是MongoDB(建议它必须在ram中拥有所有索引)。对于 MySQL 和 Solr 服务器,您可以控制内存消耗。
我会做什么:
如果我不需要所有 SQL 功能(如事务、引用完整性、连接等),我会选择 Mongo
如果我需要这些功能,并且我可以忍受较低的地理操作性能,我会选择 MySQL
现在,如果我需要(我的意思是,我真的真的需要)全文搜索,而 Mongo/Mysql FTS 功能还不够,我还会附加一个 FTS 服务器,如 Sphinx、Solr、Elasticsearch 等
关于mysql - 结合 MySQL、Sphinx 和 MongoDB。好主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6840760/
在 Sphinx 2.0.6 中尝试启用通配符 (*) 的搜索时出现以下错误 index products: syntax error, unexpected $undefined near '*'
如果我更新 sphinx.conf 文件中的资源,我可以使用 --rotate 重新索引,一切正常。如果我更新 sphinx.conf 中的索引或添加新索引 --rotate 无效,我必须重新启动 s
问题 我一直在用(Python) Sphinx doc ,以及 CommonMark解析器,编写包含用 reStructuredText 和 Markdown 编写的文件的 Sphinx 文档。到目前
我正在使用漂亮的 sphinx-bootstrap-theme 0.3.4 并尝试将它应用到 Sphinx Python 文档生成器 1.2 版之上。 当我通过 make html 构建文档时,我没有
关于此主题,有几篇“未答复”的帖子与无法找到“sphinx-build”有关: sphinx-build -h command not found in Mac OS Sphinx 是在 OSX 上使
我正在使用 Sphinx 搜索引擎,我遇到一个问题,即一些文件没有显示在搜索结果中,但绝对应该显示。我已经检查以确保没有信息。缺少会阻止这些文件出现的信息。 有什么方法可以直接查询索引,看看有没有这些
如何使用 Sphinx 从索引中获取所有记录?就像 SELECT * FROM index 一样?我知道我可以做这样的事情来获取与特定关键字匹配的所有记录:/usr/local/sphinx/bin/
我对 Sphinx 很陌生,在服务器上记录我的项目。现在一位同事看到了我一直在做的事情,她想做同样的事情——在同一台服务器上记录她的项目。 这些项目不相关(它们不属于单个 TOCtree),我不知道如
我有一个很大的索引定义,索引需要很长时间。我怀疑主要问题是由生成的许多 LEFT OUTER JOIN 引起的。 我看到了 this question ,但找不到有关使用 source: :query
写作的python工具,awscli-bastion , 具有以下由 cookiecutter 构建的目录结构. . ├── awscli_bastion │ ├── __init__.py │
Sphinx 文档生成器提供 only markup .例如,以下将仅包含外部文件“仅”如果其 html 生成器: .. only:: html .. include:: a.rst 但是我将如
我在我的Rails应用程序中实现了 sphinx 搜索。 我想模糊搜索。它应该搜索拼写错误,例如,如果输入搜索查询charact * a * ristics,则应该搜索charact * e * ri
Sphinx-autodoc 将字典、列表和元组扁平化 - 使长的几乎不可读。也并不总是需要 pretty-print 格式,因为一些嵌套的容器比分列更好地保持扁平化。有没有办法显示源代码中输入的可迭
我正在使用 Sphinx 为我的项目编写文档,并且发现下面给出的两个相似的 reStructuredText 段的呈现方式有所不同。 示例 1 Some text: * Item 0 * Item
考虑ReStructuredText中的以下列表: Broken list example ------------------- #. First do spam #. Then do ``eggs
我正在使用 Sphinx Doc 为我的一个项目创建文档,并且我在整个文档中多次使用了一些词,例如 - IP 地址、端口号和许多其他可能会随时间变化的内容。如果由于某种原因,其中一个将被更改,我只想在
我在 .rst 文件中有以下文本: Some text. * Heading | The first topic. | Another topic which is very verbose
我有很多 Sphinx 页面,它们都有相同的链接。像那些: .. _CC-BY: https://creativecommons.org/licenses/by/3.0/ .. _MIT: http:
我想链接到我的狮身人面像文档中的一些URL: blah 我在文档中发现了类似的内容:http://sphinx-doc.org/ext/extlinks.html-而是按照约定用链接替换自定义语法。
使用 sphinx 的自动模块 (https://www.sphinx-doc.org/en/master/usage/extensions/autodoc.html) 时, 我只是写在一个 .rst
我是一名优秀的程序员,十分优秀!