То, что не было предложено, это использование больших данных для хранения такого рода информации, а именно NoSQL.Это эффективно сделано специально для обработки данных такого типа.
Я использую MongoDB, но вы можете найти приложение NoSQL, соответствующее вашим потребностям.http://nosql.findthebest.com/
Это позволит вам масштабироваться для других применений, а не только для того, над чем вы работаете сейчас.Например, форумы, сообщения, билеты, заметки, сообщения и т. Д.
Другое предложение заключается в том, что вы можете альтернативно хранить данные в виде «метаданных», аналогично предложению csv, но сделать его более гибким и хранимым.структура, используя сериализацию для сжатия данных для вашего объекта для загрузки и десериализации во время выполнения.Таким образом, работает как сеанс, который не истекает, который связан с user_id, а не session_id, который может быть загружен по требованию и выделен, как вам нравится.Например, когда страница форума загружается для определенного пользователя.
например:
(примеры в сухом коде - настроить в соответствии с собственной схемой)
<?php
/**
array(
"form_id1" => array( "post_id1", "post_id2", ),
"form_id2" => array( "post_id1", "post_id2", )
);
*/
$this->user->metadata = unserialize( file_get_contents( '/metadata/forums/' . $this->user->id ) );
if( !isset($this->user->metadata[$this->forum->id]) ){
$this->user->metadata[$this->forum-id] = array();
}
if(!in_array($this->post->id, $this->user->metadata[$this->forum->id]) ){
$this->user->metadata[$this->forum-id][] = $this->post->id;
}
file_put_contents( '/metadata/forums/' . $this->user->id, serialize( $this->metadata); );
Вы можете поменять файл file_x_contents с помощью своей РСУБД - например:
<?php
$getMetadata = "SELECT forums FROM user_metadata WHERE user_id = $this->user->id";
$dbrs = mysqli_query( $getMetadata );
$this->user->metadata = unserialize( $dbrs['forums'] );
$dbrs->close();
$metadata = serialize($this->user->metadata);
$saveMetadata = "UPDATE user_metadata SET forums = '$metadata' WHERE user_id = '$this->user->id'";
mysqli_query( $saveMetadata );
Вы также можете выполнять другие действия, такие как поиск с помощью регулярных выражений, выделять их дальше (тема, категория и т. Д.) Или изменятьметод, основанный на пользователях, которые читают сообщения на форуме (forum-> post-> просматриваемые) вместо сообщений на форуме, которые пользователь читает (user-> metadata-> forums).Особенно, если у вас уже есть работающее «Общее количество просмотров», но это будет сложнее для получения сообщений, которые были / не были прочитаны конкретным пользователем, в то время как обратное верно для другого метода, или даже используйте оба метода в сочетании.