我正在构建搜索系统,带有nosql
数据库cassandra
,它不支持任何类型的关键字搜索,所以有几个选项,经过一番搜索,这就是想出来的。
我可以存储可以搜索的关键字列表,例如假设它是音乐流派。所以我会存储所有这些类型,然后一次检索所有这些类型并用 php 过滤它们,如果说2k
关键字或更多,它会很慢吗?
我想在某个地方获得过滤结果,~100ms
这可能吗?如果是这样,什么样的php
功能可以帮助我进行单词过滤?
如果您希望按音乐流派过滤歌曲或专辑,那么使用 Cassandra 真的很容易。我将使用术语“标签”而不是流派,因为您真的可以使用任何类型的标签来做到这一点,而不仅仅是流派。
布置一个列族,其中键是标签,行中每个具有该标签的项目都有一个单元格。您可以使用项目名称或 ID 作为单元格名称,单元格值可以为空或包含您想要的任何其他元数据。
使用 phpcassa(它基于 Cassandra 的原始 Thrift RPC API),如果你想在标签下存储一个项目,它就像这样简单:
$cf->insert($tag, array($item->name, $item->metadata));
要获取具有特定标签的所有项目,请执行以下操作:
$cf->get($tag);
虽然一个好的 PHP CQL 3 驱动程序还没有完成,但是使用 CQL 3 你可以做这样的事情:
CREATE TABLE TAGS (
tag utf8,
itemid uuid,
PRIMARY KEY (tag, itemid)
);
你会像这样添加一个标记的项目:
INSERT INTO TAGS (tag, itemid) values ("rock", "Led Zeppelin");
您可以通过以下方式获取所有带有标签的项目:
SELECT * FROM TAGS WHERE tag="rock";
你可以很容易地在一个标签下存储一百万个项目,并且获取第一个,比如 2000,会非常快,只有几毫秒。