$qb = $this->createQueryBuilder('room')
->join('room.doors', 'd')
return $qb->getQuery()->getResult();
/**
* @var \Doctrine\Common\Collections\Collection
* @ORM\OneToMany(targetEntity="Applications\Entity\Offer", mappedBy="application", cascade={"persist"})
*/
private $offers;
/**
* @ORM\ManyToOne(targetEntity="Applications\Entity\Application", inversedBy="offers")
* @ORM\JoinColumn(name="application_id", referencedColumnName="id", nullable=true, onDelete="CASCADE")
*/
private $application;
Добрый день! Хотел посоветоваться с опытными бэкэнд программистами.
Встала задача создать высоконагруженный проект (Типо кассового решения). В базе данных через 1-2 года планируется , около 150млн записей у основной сущности (продажа).
то есть нужно максимально быстрое чтение этих данных
Но большим плюсом является что эти 150млн записей - разделены примерно на 1000-5000 разных пользователей, и выборка нужна в рамках одного пользователя только.
Как лучше хранить такие данные? в одной таблице? или можно разделить по разным таблицам, и держать связку какой пользователь в какой базе хранит.
Сам пишу на mysql - потянет ли он такие объемы, на нормальном железе. Или нужно смотреть в сторону других БД?
потянет ли он такие объемы, на нормальном железе
const concat = (key, ...arrs) =>
Object.values([]
.concat(...arrs)
.reduce((acc, n) => (acc[n[key]] = acc[n[key]] || n, acc), {})
);
const newFirst = concat('hour', first, hours);
function add(key, target, ...sources) {
const keys = new Set(target.map(key));
sources.forEach(arr => arr.forEach(n => {
const k = key(n);
if (!keys.has(k)) {
keys.add(k);
target.push(n);
}
}));
return target;
}
add(n => n.hour, first, hours).sort((a, b) => a.hour - b.hour);
hours
. Поэтому стоит сначала переделать объекты в словари, где ключ час, а значение - объект с car
и bike
class DevClass {
public $group_id = 30666517;
public $membersGroups = array();
public $access_token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
public function devMethod(){
$opts = ["group_id"=>$this->group_id, "access_token"=>$this->access_token, "fields"=>"photo_50,members_count", "v"=>"5.80"];
$answer = $this->vk->getMethod("groups.getById", $opts, true);
//$members_count = $answer->response[0]->members_count;
$members_count = 45000;
$members_groups = 0; //изначально в массиве 0 объектов
//выполняем цикл пока полученное кол-во участников меньше общего кол-ва участников в группе
while($members_count > $members_groups){
usleep(300000); //задержка на 0.3 сек.
$answer = $this->getMembers25k($this->group_id, $members_count);
if($answer->response){
$new = explode(",",$answer->response);
$this->membersGroups = array_merge($this->membersGroups, $new);
//второй раз определяем переменную, уже с новым массивом данных
$members_groups = count($this->membersGroups);
}
else{
echo "NO RESPONSE";
print_r($answer);
die();
}
}
print_r($this->membersGroups);
die();
}
public function getMembers25k($group_id, $members_count) {
$members_groups = count($this->membersGroups);
$offset = 1000;
$code = 'var members = API.groups.getMembers({"group_id": '.$this->group_id.', "v": "5.80", "sort": "id_asc", "count": '.$offset.', "offset": '.$members_groups.'}).items;'
.'var offset = '.$offset.';'
.'while (offset < 25000 && (offset + '.$members_groups.') < '.$members_count.')'
.'{members = members + "," + API.groups.getMembers({"group_id": '.$this->group_id.', "v": "5.80", "sort": "id_asc", "count": '.$offset.', "offset": ('.$members_groups.' + offset)}).items;offset = offset + '.$offset.';};'
.'return members;';
$answer = $this->vk->getMethod("execute", ["code" => urlencode($code), "v"=>"5.80", "access_token" => $this->access_token], true);
return $answer;
}
}
$dev = new DevClass();
$dev->devMethod();
Count(temperature > 10)?