我正在作为一个有趣的网站项目在社交网站上工作,目的只是为了提高我的技能。我将所有数据保存在mysql数据库中。
当我创建完整的帐户记录(使用帖子,关注者等创建它们)时,我遇到了非常糟糕的表现。这样做的原因,至少在我看来,是我对数据库进行了大量查询。 我总是首先进行查询以检查是否存在任何类型或表的行,然后通过插入创建它。
首先,还有更好的方法吗? 其次,您是否认为性能不佳(大约2秒)的主要原因是因为我没有发送所有查询;立即分离到服务器。
很抱歉,如果这是一个基本问题。 我之所以这么问,是因为在我以前的一个项目中,我在几秒钟甚至更快的时间内创建了数千个项目实体(消费品)。
这是代码。我使用的是我自己写的sql lib,insert()函数只是进行基本的插入调用,而update()是基本的更新调用。 sql lib可以完美运行。
function create_account($account) {
if (!$account instanceof Account) {
throw new Invalid_Parameter_Exception('parameters with invalid type.');
}
if (!account_exists($account->id)) {
$basic_account = new Basic_Account($account->id, $account->username, $account->name);
create_empty_account($basic_account);
}
$general_data['username'] = $account->username;
$general_data['name'] = $account->name;
if (!is_null($account->website)) {$general_data['website'] = $account->website;}
if (!is_null($account->bio)) {$general_data['bio'] = $account->bio;}
$general_data['profile_photo_url'] = $account->profile_photo_url;
$general_data['private'] = $account->is_private;
$general_data['verified'] = $account->is_verified;
$general_data['business_account'] = $account->is_business_account;
$general_data['joined_recently'] = $account->joined_recently;
$general_data['last_update'] = $account->last_update;
update(DATABASE, ACCOUNTS_TABLE, $general_data, 'id', $account->id);
//followers
$account_following_data['last_update'] = date('Y-m-d G:i:s');
foreach($account->followers as $follower) {
if(!account_exists($follower->id)) {
create_empty_account($follower);
}
if (!account_following_entry_exists($follower->id, $account->id)) {
$account_following_data['account_id'] = $follower->id;
$account_following_data['account_id_following'] = $account->id;
insert(DATABASE, ACCOUNT_FOLLOWING_TABLE, $account_following_data);
}
}
//followings
$account_following_data['last_update'] = date('Y-m-d G:i:s');
foreach($account->following as $followed_user) {
if(!account_exists($followed_user->id)) {
create_empty_account($followed_user);
}
if (!account_following_entry_exists($account->id, $follower->id)) {
$account_following_data['account_id'] = $account->id;
$account_following_data['account_id_following'] = $follower->id;
insert(DATABASE, ACCOUNT_FOLLOWING_TABLE, $account_following_data);
}
}
//posts
foreach($account->posts as $post) {
create_post($post);
}
//tagged posts
foreach($account->tagged_posts as $post) {
create_post($post);
}
}