繁体   English   中英

MySQL LONGTEXT分页

[英]MySQL LONGTEXT pagination

我有包含LONGTEXT表帖子。 我的问题是我想检索特定帖子的一部分(基本上是分页)

我使用以下查询:

SELECT SUBSTRING(post_content,1000,1000) FROM posts WHERE id=x

这样就好了,但是问题是位置和长度。 在大多数情况下,第一个单词和最后一个单词都不完整,这很有意义。

如何从位置x检索长度为y的完整单词?

大概是为了节省MySQL服务器与运行应用程序的计算机之间的网络流量开销而进行的。 碰巧的是,您并没有在MySQL服务器上节省任何其他类型的工作负载。 它必须从磁盘获取LONGTEXT项,然后通过SUBSTRING运行它。

大概您已经基于可靠的性能分析而决定必须保存此网络流量。 您可能现在想重新访问此分析,因为您知道它不会节省很多MySQL服务器工作量。 除非您有成千上万个很长的LONGTEXT项目,而且要检索和显示其中的大量流量,否则您的节省将是微不足道的。

换句话说,这是一项优化任务。 亚尼? http://en.wikipedia.org/wiki/YAGNI

如果确实需要它,则必须创建软件来逐字处理LONGTEXT项目。 最好的选择是在客户端软件中执行此操作。 首先检索第一页以及文章的第ak个或第2个。 然后,解析文本以查找完整的单词。 在第一页及其后面的空格中找到最后一个完整的单词后,该字符位置便是下一页的起始位置。

在MySQL存储过程中,这种任务非常麻烦。 另外,在存储过程中进行处理时,将在共享且难以扩展的资源(MySQL服务器计算机)上而不是在可克隆的客户端计算机上使用处理周期。

我知道我没有给您干净的代码来满足您的要求。 但是,按照您的建议做,显然不是一个好主意。

编辑

一个观察结果:1 GB的服务器RAM大约花费20美元。 像memcached这样的缓存系统在有效利用价值100美元的内存方面做得很好。 对于您描述的用例,这已经足够了。

另一个观察结果:许多提供大型文档的公司都使用文件系统而不是DBMS来存储它们。 可以非常轻松地在内容服务器之间共享或复制文件系统,并且可以轻松地随机访问文件而没有任何开销。

将整本书存储在单个BLOB或CLOB中有点创新。 如果您可以按某种方式细分书籍-页面? 章节? 千字块? -并为每个段创建单独的数据行,您的DBMS将比您描述的要好得多。

如果您仍然要这样做,请执行以下操作:

  1. 在每个段中检索的字符数总是多于您需要的100个字符。 例如,当您需要字符30000-35000时,检索30000-35100。

  2. 检索该段之后,在数据中查找第一个单词中断(在第一个段上除外)并从该单词开始显示。

  3. 同样,在额外的100个字节中找到第一个分词符,然后显示该分词符。

因此,您获取的数据可能是30000-35100,显示的数据可能是30013-35048,但这将是整个单词。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM