Performance Symfony2 doctrine2使用集合-性能
这个问题的重点是找出哪种技术更好,并听取一些熟练的symfony2编码人员的不同意见 一个例子将在挑战和“挑战评级”表中说明,其中许多人可以对某些挑战进行评级。(类似于投票问题系统) 这些表如下所示:(like\u unlike是布尔值(1=like,0=unlike) 挑战的数据量将在10-200+之间Performance Symfony2 doctrine2使用集合-性能,performance,symfony,memory,collections,doctrine-orm,Performance,Symfony,Memory,Collections,Doctrine Orm,这个问题的重点是找出哪种技术更好,并听取一些熟练的symfony2编码人员的不同意见 一个例子将在挑战和“挑战评级”表中说明,其中许多人可以对某些挑战进行评级。(类似于投票问题系统) 这些表如下所示:(like\u unlike是布尔值(1=like,0=unlike) 挑战的数据量将在10-200+之间 使用集合 挑战实体 挑战评级实体 但现在是一个决定 问题1 我应该通过从querybuilder查询数据库来获得类似的内容吗?(经典选择计数) 或 我应该这样使用集合和标准吗 **什么对内
使用集合 挑战实体 挑战评级实体 但现在是一个决定 问题1 我应该通过从querybuilder查询数据库来获得类似的内容吗?(经典选择计数) 或 我应该这样使用集合和标准吗 **什么对内存使用更好?什么对数据库性能更好** 如果我没有错,以下两个查询将通过这两种方法执行:
SELECT
t0.id AS id1,
t0.like_dislike AS like_dislike2,
t0.fan_id AS fan_id3,
t0.challange_id AS challange_id4
FROM
challange_rating t0
WHERE
(
t0.like_dislike = ? AND t0.challange_id = ?
)
Parameters: [1, 12]
SELECT
t0.id AS id1,
t0.like_dislike AS like_dislike2,
t0.fan_id AS fan_id3,
t0.challange_id AS challange_id4
FROM
challange_rating t0
WHERE
(
t0.like_dislike = ? AND t0.challange_id = ?
)
现在我可以将喜欢和不喜欢的数量传递给视图,如下所示:
'challangeLikes'=>$challangeLikes->count(),
'challangeDislikes'=>$challangeDislikes->count(),
问题2
如果我想知道某个用户是否已经对该挑战进行了评分,该怎么办
再次
*我应该使用经典的querybuilder样式和select count吗*
或
我应该使用如下方法:
$ratedAlreadyCol = $challange->checkIfUserRatedAlready($user)->first();
这实际上会执行另一个查询?类似于classic select count,但集合会为我执行此操作?所以它不是使用allll likes在某个大内存数组中进行搜索,而是对DB的查询
SELECT
t0.id AS id1,
t0.like_dislike AS like_dislike2,
t0.fan_id AS fan_id3,
t0.challange_id AS challange_id4
FROM
challange_rating t0
WHERE
(
t0.fan_id = ? AND t0.challange_id = ?
)
Parameters: [25, 12]
问题3-可能是最重要的性能
我想展示所有的“粉丝-那些给某项挑战打分的人”
再次
我是否应该在存储库中创建一个单独的querybuilder方法,通过内部连接到users表来选择特定挑战的所有评分(这样我就可以显示配置文件图像和用户名)
或
我是否应该通过它获得所有评级和细枝循环,如:
$challangeLikesCollection = $challange->getLikes();
{% for bla bla
但是
如果我这样做的话…条令将对循环中的每个“fan”执行一个select查询到用户表…当有200个fan时…这不是很好,对吗
奖金问题
能不能请他提供处理这些情况的方法?有什么建议吗
或者你会使用其他技术吗
我非常关心内存使用和数据库加载时间,因为这将在任何地方使用,每个用户都会有这样一个具有不同挑战的列表。该列表将包括15个挑战,并将所有喜欢的、不喜欢的内容连接到列表中的每个挑战等…性能
感谢您的解释、提示和提示,它们将帮助我和其他读者进入另一个层次。我将做以下几点:
喜欢的数量
和不喜欢的数量
字段添加到挑战
中,并在添加类
和删除类
中更新这些值like_loke
重命名为like
,因为它是一个布尔字段,1表示like,0表示不喜欢条令在下面使用PDO,水合作用意味着如何处理PDO结果集并将其转换为其他内容。默认对象水合作用意味着将结果集转换为对象图,这是一个非常昂贵的操作。有一些操作成本较低,但您失去了一些灵活性。例如,如果您使用array hydra结果将是一个数组,因此您不能修改它(我的意思是持久化回数据库)因此,它只是为了阅读,结果不是实体对象,你不能使用它的方法,例如自定义getter。如果你愿意,你可以创建。非常感谢你的回答!1.我以前一直在玩这个想法……这很好。2.这只是一个装饰性的改变,因为我的like_厌恶也是布尔值。3.嗯,我明白一定要选择所有的粉丝挑战您将创建只选择用户名和照片的自定义查询,对吗?还有一个问题…“使用数组水合和索引BY username”我从来都不理解这个“水合词”是什么意思,请解释一下?为什么有u.username索引?它的用途是什么?查询将选择以下数据“r.fan\u id”是否?这是外键。ThxI添加了一些解释…是的,您应该只选择您需要的字段。是
r.fan
表示fun\u id,但我不确定您是否可以直接使用fun\u id,但如果需要,请更正查询。(2.是的,它是装饰性的,或者更具可读性,例如,喜欢\不喜欢=1意味着什么?它意味着喜欢还是不喜欢?你不确定。但是名为喜欢的字段,很明显,喜欢=1意味着喜欢,喜欢=0意味着不喜欢,但可能只是我…)嗯,我想只有你:我喜欢你不喜欢工作的gr8,因为我的逻辑:D,但thx的提示hh。我标记了你的答案!我终于了解了水合作用是关于什么的heh…所以在大型站点中,为了避免内存问题,我应该使用数组水合作用?我不知道索引方式和结果中的键!这将在将来非常方便。非常感谢!我知道用刚刚得到回报的问题来写我的努力:)谢谢!:)这只是f
'challangeLikes'=>$challangeLikes->count(),
'challangeDislikes'=>$challangeDislikes->count(),
$ratedAlreadyCol = $challange->checkIfUserRatedAlready($user)->first();
SELECT
t0.id AS id1,
t0.like_dislike AS like_dislike2,
t0.fan_id AS fan_id3,
t0.challange_id AS challange_id4
FROM
challange_rating t0
WHERE
(
t0.fan_id = ? AND t0.challange_id = ?
)
Parameters: [25, 12]
$challangeLikesCollection = $challange->getLikes();
{% for bla bla