Go Back   vb.org Archive > vBulletin Modifications > Archive > vB.org Archives > vBulletin 2.x > vBulletin 2.x Full Releases
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools
Optimized attachments in vB2.X.X Details »»
Optimized attachments in vB2.X.X
Version: 1.00, by s.molinari s.molinari is offline
Developer Last Online: Sep 2018 Show Printable Version Email this Page

Version: 2.3.x Rating:
Released: 02-23-2003 Last Update: Never Installs: 12
 
No support by the author.

Hi vB Troopers,

*****************
* Hack Idea:
*****************
This hack is designed to improve 2 things:
1. Prevent duplicate attachments altogether.
2. Speed up the query for duplicates and avoid errors.

What does vB do now?
---------------------------------
If you have "Allow Duplicate Images" set to "No" in your attachments options and your database has a very large amount of attachments, at worst, the server will timeout or the query to check for duplicate attachments takes an extreme amount of time. The duplicates query also checks only for duplicates from a particular user so actually it is possible to have duplicate attachments in the database.

What does vB do differently after the hack?
------------------------
With the hack installed, each attachment receives a hash which is stored in the attachment table. This hash is then used to find duplicate attachments regardless of whether or not the attachment is from the same user or not. So duplicate attachments are not possible.

Why vB works faster with this hack?
------------------------------------
Since the hash field and not the actual file content is being compared, then much less server resources are needed for MySql to run the query. Also the hash field is indexed. This in turn speeds up the saving of the attachments when checking for duplicates.

Please be aware that this hack alters the database and when carried out incorrectly, could cause data loss. Installation is at your own risk.

That said, enjoy!

Scott

This hack was written by pogo.

Also note, a system similiar to this will be part of vB3, so no need to ask if it will be added.

Show Your Support

  • This modification may not be copied, reproduced or published elsewhere without author's permission.

Comments
  #32  
Old 02-26-2003, 03:53 PM
Dean C's Avatar
Dean C Dean C is offline
 
Join Date: Jan 2002
Location: England
Posts: 9,071
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

lifesourcerec - The @ prevents it from outputting an error if the function fails. It was added in there in vb 2.2.7 i believe (i can remember from when i upgraded)

- miSt
Reply With Quote
  #33  
Old 02-26-2003, 04:04 PM
pogo's Avatar
pogo pogo is offline
 
Join Date: Oct 2001
Posts: 74
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally posted by TranceMaster
how would i go about removing this hack
after installing it, my forum has been going very very slow
how do i remove these queries?
-------------------------------------------------------------------------------
ALTER TABLE attachment ADD hash VARCHAR(32) DEFAULT '0' NOT NULL;
-------------------------------------------------------------------------------


-------------------------------------------------------------------------------
UPDATE attachment SET hash = md5(filedata);
-------------------------------------------------------------------------------


-------------------------------------------------------------------------------
ALTER TABLE attachment ADD INDEX(hash);
-------------------------------------------------------------------------------

hope sum1 can help
thanks
If you use PHPMyAdmin you can remove the hash field and the index just by clicking the links in PHPMyAdmin.

In the table listing menu click attachment.
Then in the fields table click delete in the hash row.
And last click delete a little below in the index area.
Reply With Quote
  #34  
Old 02-26-2003, 04:13 PM
TranceMaster TranceMaster is offline
 
Join Date: Mar 2002
Posts: 42
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally posted by pogo


If you use PHPMyAdmin you can remove the hash field and the index just by clicking the links in PHPMyAdmin.

In the table listing menu click attachment.
Then in the fields table click delete in the hash row.
And last click delete a little below in the index area.
tried that aswell, yet for some reason the forum is going very very slow.

dont get me wrong, great hack, i would just like 2 tottaly remove it now,
Reply With Quote
  #35  
Old 02-26-2003, 04:21 PM
TranceMaster TranceMaster is offline
 
Join Date: Mar 2002
Posts: 42
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

ahh yea slowly but surely, the speed is improving.
Reply With Quote
  #36  
Old 02-26-2003, 07:38 PM
s.molinari's Avatar
s.molinari s.molinari is offline
 
Join Date: Nov 2001
Posts: 145
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Hi all. There is a small (embarrassing) mistake in the functions.php replacement code. :0 Please correct the following lines in functions.php.
PHP Code:
if (!$allowduplicates) {
      if (
$result=$DB_site->query_first("SELECT attachmentid
                                         FROM attachment
                                         WHERE hash = '"
.addslashes($attachmenthash)."'")) {
        
$attachmentid $result[attachmentid];
      }
    } else {
      
$DB_site->query("INSERT INTO attachment (attachmentid,userid,dateline,filename,filedata,visible,hash) VALUES (NULL,$bbuserinfo[userid],".time().",'".addslashes($attachment_name)."','".addslashes($filestuff)."','$visible','".addslashes($attachmenthash)."')");
      
$attachmentid=$DB_site->insert_id(); 
with
PHP Code:
  if (!$allowduplicates) {
      if (
$result=$DB_site->query_first("SELECT attachmentid
                                         FROM attachment
                                         WHERE hash = '"
.addslashes($attachmenthash)."'")) {
        
$attachmentid $result[attachmentid];
        return 
$attachmentid;
      }
    }
    
$DB_site->query("INSERT INTO attachment (attachmentid,userid,dateline,filename,filedata,visible,hash) VALUES (NULL,$bbuserinfo[userid],".time().",'".addslashes($attachment_name)."','".addslashes($filestuff)."','$visible','".addslashes($attachmenthash)."')");
    
$attachmentid=$DB_site->insert_id(); 
We apologize for the inconvenience. The download has also been updated.

Scott
Reply With Quote
  #37  
Old 02-26-2003, 07:40 PM
s.molinari's Avatar
s.molinari s.molinari is offline
 
Join Date: Nov 2001
Posts: 145
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally posted by TranceMaster


tried that aswell, yet for some reason the forum is going very very slow.

dont get me wrong, great hack, i would just like 2 tottaly remove it now,
Hi,
I highly doubt that this hack is the cause of the slow down on your site.

Scott
Reply With Quote
  #38  
Old 02-26-2003, 07:52 PM
TranceMaster TranceMaster is offline
 
Join Date: Mar 2002
Posts: 42
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally posted by s.molinari
Hi,
I highly doubt that this hack is the cause of the slow down on your site.

Scott
well it was right after i installed it, that the forum came almost to a halt.
all is fine now though.
forum is running normally again.

Reply With Quote
  #39  
Old 02-26-2003, 07:53 PM
Boofo's Avatar
Boofo Boofo is offline
 
Join Date: Mar 2002
Location: Des Moines, IA (USA)
Posts: 15,776
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Scott, how about the English version?
Reply With Quote
  #40  
Old 02-26-2003, 08:14 PM
Brad Brad is offline
 
Join Date: Nov 2001
Posts: 4,765
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

When i apply the fix to functions.php i get this error:

PHP Code:
Parse errorparse error in /home/kous/public_html/forums/admin/functions.php on line 1756

Fatal error
Call to undefined function: makelogincode() in /home/kous/public_html/forums/global.php on line 367 
Reply With Quote
  #41  
Old 02-27-2003, 05:30 AM
Aaron1's Avatar
Aaron1 Aaron1 is offline
 
Join Date: Oct 2002
Location: Amsterdam
Posts: 200
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I think the code should be like this:

PHP Code:
if (!$allowduplicates) {
      if (
$result=$DB_site->query_first("SELECT attachmentid
                                         FROM attachment
                                         WHERE hash = '"
.addslashes($attachmenthash)."'")) {
        
$attachmentid $result[attachmentid];
        return 
$attachmentid;
      }
      
    
$DB_site->query("INSERT INTO attachment (attachmentid,userid,dateline,filename,filedata,visible,hash) VALUES (NULL,$bbuserinfo[userid],".time().",'".addslashes($attachment_name)."','".addslashes($filestuff)."','$visible','".addslashes($attachmenthash)."')");
    
$attachmentid=$DB_site->insert_id(); 
I guess there was just one } to much.
Correct me if i am wrong Molinari...

Grtz
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 10:18 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.10596 seconds
  • Memory Usage 2,340KB
  • Queries Executed 25 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (4)bbcode_php
  • (4)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)modsystem_post
  • (1)navbar
  • (6)navbar_link
  • (120)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (4)pagenav_pagelink
  • (11)post_thanks_box
  • (11)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (11)post_thanks_postbit_info
  • (10)postbit
  • (11)postbit_onlinestatus
  • (11)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • pagenav_page
  • pagenav_complete
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete