- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个使用 Rails 4、PostgreSQL 并托管在 Heroku 上的 Rails 应用程序。该应用程序围绕以下模型展开:用户和文章。用户可以创建文章。一篇文章包含标题、描述、位置(纬度、经度)和图像。
我想添加一个通知系统,其工作方式如下:
以可扩展的方式实现它的最佳方法是什么?
在最简单的形式中,我可以创建一个名为关键字的模型,用于存储用户希望收到通知的关键字。然后在文章的创建操作中,检查标题(或描述)是否包含任何已保存的关键字。
这听起来不错,但一旦添加了任何合理数量的用户,它可能就会失败。
显然,后台任务可以解决问题,但直接在数据库上执行基本字符串包含听起来仍然是错误的。
也许我可以将标题和描述标记为索引并使用后台进程来处理繁重的工作?我听说 Postgres 有一些内置的文本搜索 - 这行得通吗?我可以使用像 Solr 或 Redis 这样的 Heroku 插件来处理这一切吗? (不必为附加组件付费是一个优势)。也许有人对相同的功能有更好的实现。
我知道我可以快速实现它,我只是想确保它的实现符合标准。
谢谢,布莱恩
最佳答案
我遇到过类似的问题。最慢的事情是进行不区分大小写的搜索。我建议您采用以下方法:让 TID 成为您存储标题的行的 ID;然后创建一个表,其中包含标题中每个小写单词的一行,以及相应的 TID。比您需要的是给定用户的单词和关键字之间的连接。您可以使用哈希索引加快此查询。
在我的例子中,没有一个 postgres 文本函数可用,因为它们的性能都很差。
PS 我们对大约 60000 个文档实现了全文搜索,因此您的情况可能会有所不同。
关于ruby-on-rails - 让用户订阅关键字的好方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26762466/
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!