Поиск строк по префиксу в BigTable

23.11.2009

Нативный GAE дэйтастор не умеет фильтровать строки по префиксу, как это делает, например mysql

SELECT * FROM foo WHERE bar LIKE 'prefix%';

Взамен этого в мануале предлагается следущий трюк:

db.GqlQuery("SELECT * FROM foo WHERE bar >= :1 AND bar < :2",
 "prefix", u"prefix" + u"\ufffd")

То есть, выбрать все значения которые лежат между префиксом и префиксом + наибольший unicode символ. В отсортированом по этому полю дэйтасете это даст как раз выборку по префиксу.

Учитывая, что он создает индексы для подобных выборок автоматически, должно быть довольно быстро.

Трюк, конечно, из разряда удаления гланд через анус (кроме того, непонятно, как матчить строки по постфиксу, или просто по вхождению), с другой стороны, надо попробовать такое в MySQL, может побыстрее нэйтивного лайка будет. Хотя, не исключено, что он именно так и реализован внутренне :).

Stay tuned, сегодня–завтра будет пост по расчетам медиан на крупных выборках с профайлингом и т.п.

Добавить комментарий

Fill in your details below or click an icon to log in:

Логотип WordPress.com

You are commenting using your WordPress.com account. Log Out / Изменить )

Фотография Twitter

You are commenting using your Twitter account. Log Out / Изменить )

Фотография Facebook

You are commenting using your Facebook account. Log Out / Изменить )

Connecting to %s

Follow

Get every new post delivered to your Inbox.