gpt4 book ai didi

MySQL LONGTEXT 分页

转载 作者:行者123 更新时间:2023-11-29 03:42:09 26 4
gpt4 key购买 nike

我有包含 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 项目。最好的办法是在您的客户端软件中执行此操作。首先检索第一页加上文章的一两页。然后,解析文本以寻找完整的单词。在第一页中找到最后一个完整的单词及其后面的空格后,该字符位置就是下一页的起始位置。

这种任务是 MySQL 存储过程中的一个巨大难题。此外,当您在存储过程中执行此操作时,您将在共享且难以扩展的资源(MySQL 服务器计算机)而不是可克隆的客户端计算机上使用处理周期。

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

编辑:

观察:1 GB 的服务器 RAM 成本大约为 20 美元。像 memcached 这样的缓存系统可以很好地有效利用值(value) 100 美元的内存。这对于您描述的用例来说已经足够了。

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

将整本书存储在单个 BLOB 或 CLOB 中有点创新。如果你能按某种片段——页来分解这些书?章节?千字 block ? -- 并为每个段创建单独的数据行,您的 DBMS 将比您描述的更好地扩展。

如果您无论如何都要这样做,请按以下步骤操作:

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

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

  3. 同理,在多出的100个字节中找到第一个分词,并显示到该分词为止。

所以你获取的数据可能是 30000 - 35100,你显示的数据可能是 30013 - 35048,但它会是整个单词。

关于MySQL LONGTEXT 分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12543247/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com