Показать все ключи с phpcassa - PullRequest
2 голосов
/ 04 мая 2011

Я довольно новичок в Кассандре, но пока у меня хороший прогресс.

$conn = new ConnectionPool('Cluster');
$User = new ColumnFamily($conn, 'User');

$index_exp = CassandraUtil::create_index_expression('email', 'John@dsaads.com');
$index_clause = CassandraUtil::create_index_clause(array($index_exp));
$rows = $User->get_indexed_slices($index_clause);

foreach($rows as $key => $columns) {
echo $columns['name']."<br />";
}

Я использую этот тип запроса, чтобы получить конкретную дату с адреса электронной почты somebodys.Однако теперь я хочу сделать 2 вещи.

  1. Подсчитать каждого пользователя в базе данных и отобразить число
  2. Перечислите каждого пользователя в базе данных с $ столбцами ['name']."". $ columns ['email']

В MySQL я бы просто удалил атрибут 'where' из запроса на выборку, однако я думаю, что здесь все немного сложнее?

Ответы [ 2 ]

4 голосов
/ 05 мая 2011

В Кассандре нет простого способа сосчитать все ряды.Вы в основном должны сканировать все.Если это то, что вы хотите делать часто, вы делаете это неправильно.Пример кода:

$rows = $User->get_range("", "", 1000000);
$count = 0;
foreach($rows as $row) {
    $count += 1;
}

Второй ответ похож:

$rows = $User->get_range("", "", 1000000, null, array("name", "email"));
foreach($rows as $key => $columns) {
    echo $columns["name"]." ".$columns["email"];
}
1 голос
/ 11 августа 2012

Тайлер Хоббс приводит очень хороший пример.

Однако, если у вас много пользователей, вы не хотите итерировать их постоянно.

Лучше использовать эту итерацию один или два раза в день и хранить данные в cassandra или memcached / redis.


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

$ count = $ cf-> get_count ($ rowkey = 0);

примечание, get_count () также является медленной операцией, поэтому вам все равно нужно ее кешировать.

Если get_count () возвращает 100, вам нужно обновить phpcassa до последней версии.


Что касается второй части - если у вас меньше 4000-5000 пользователей, я бы снова сделал что-то странное - поместите их в один ряд как суперколонки. Тогда читать будет только с одной операцией:

$ users = $ scf-> get ($ rowkey = 0, new ColumnSlice ("", "", 5000)); foreach ($ users как $ user) { echo $ user ["name"]. "". $ user ["email"]; }

...