1

我正在构建搜索系统,带有nosql数据库cassandra,它不支持任何类型的关键字搜索,所以有几个选项,经过一番搜索,这就是想出来的。

我可以存储可以搜索的关键字列表,例如假设它是音乐流派。所以我会存储所有这些类型,然后一次检索所有这些类型并用 php 过滤它们,如果说2k关键字或更多,它会很慢吗?

我想在某个地方获得过滤结果,~100ms这可能吗?如果是这样,什么样的php功能可以帮助我进行单词过滤?

4

1 回答 1

0

如果您希望按音乐流派过滤歌曲或专辑,那么使用 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,会非常快,只有几毫秒。

于 2012-10-20T19:15:21.297 回答