Snitz Forums 2000
Snitz Forums 2000
Home | Profile | Register | Active Topics | Members | Search | FAQ
Username:
Password:
Save Password
Forgot your Password?

 All Forums
 Snitz Forums 2000 MOD-Group
 MOD Add-On Forum (W/Code)
 Database calls in Active.asp
 New Topic  Topic Locked
 Printer Friendly
Previous Page | Next Page
Author Previous Topic Topic Next Topic
Page: of 6

Nikkol
Forum Moderator

USA
6907 Posts

Posted - 23 March 2002 :  23:17:28  Show Profile
Gremlin - your idea is good ... I was going to use the same idea for my UserGroup mod I'm working on ... delimited list of allowed forums based on the user ... but I just haven't gotten around to working on it. I thought I saw somewhere else in the code where this is done with a comma delimited list. Can't think right now where that is though.

If you are using GetRows, couldn't you just use VBScript's Join function to build the list?

Nikkol

Edited by - Nikkol on 23 March 2002 23:20:51
Go to Top of Page

Nathan
Help Moderator

USA
7664 Posts

Posted - 23 March 2002 :  23:21:00  Show Profile  Visit Nathan's Homepage
Why dont you use a two dimentional array to store moderator/forum relationships.

  Nathan Bales - Romans 15:13
----------------------------------

Snitz Exchange | Do's and Dont's
Go to Top of Page

Gremlin
General Help Moderator

New Zealand
7528 Posts

Posted - 23 March 2002 :  23:26:03  Show Profile  Visit Gremlin's Homepage
quote:

Your above function looks good, but try to use the Snitz variable naming prefixes

str for string
int for interger
bol for boolian
arr for array


  Nathan Bales - Romans 15:13
----------------------------------

Snitz Exchange | Do's and Dont's




Each to their own I guess Nathan :) I just know I'm not personally going to subscribe to a topic based on its subject line alone, I want to read it first.

As for variable names, well umm, take a look there really isn't that much standarisation going on with most of them now (the prefixes you mention are actually long time Microsoft reccomendations for variable naming conventions), I've just for now used the variable names that matched the surrounding code I was editing.

I've actually personally removed all Admin type links from my pages without any complaints so far from people. To view them I just add an Admin=1 to the querystring of each page, I found i very rarely need them showing except when I was setting up the boards and occasionally again when I was doing a little bit of admin. I'd rather trim 0.01 of a second off the execution time than have them clutter my page up again each to their own !

quote:
I thought I saw somewhere else in the code where this is done with a comma delimited list. Can't think right now where that is though

You might have been thinking of the bad words function Nikkol, also the Poll Mod uses something like this and then uses split(string) to get the fields out again, think it uses it for keeping track of polls members have voted on.

www.daoc-halo.com



Edited by - Gremlin on 24 March 2002 09:14:57
Go to Top of Page

Nathan
Help Moderator

USA
7664 Posts

Posted - 23 March 2002 :  23:29:08  Show Profile  Visit Nathan's Homepage
Let me clean up that query a bit.

SELECT
FORUM_FORUM.F_SUBJECT,
FORUM_FORUM.F_SUBSCRIPTION,
FORUM_FORUM.F_STATUS,
FORUM_FORUM.F_ORDER,
FORUM_CATEGORY.CAT_STATUS,
FORUM_CATEGORY.CAT_SUBSCRIPTION,
FORUM_CATEGORY.CAT_ORDER,
FORUM_TOPICS.T_SUBJECT,
FORUM_TOPICS.T_VIEW_COUNT,
FORUM_TOPICS.FORUM_ID,
FORUM_TOPICS.T_STATUS,
FORUM_TOPICS.TOPIC_ID,
FORUM_TOPICS.T_ISPOLL,
FORUM_TOPICS.CAT_ID,
FORUM_TOPICS.T_REPLIES,
FORUM_TOPICS.T_AUTHOR,
FORUM_MEMBERS.M_NAME,
FORUM_TOPICS.T_LAST_POST,
FORUM_TOPICS.T_LAST_POST_AUTHOR,
FORUM_SUBSCRIPTIONS.MEMBER_ID
FROM
(
FORUM_CATEGORY INNER JOIN
(
FORUM_FORUM INNER JOIN
(
FORUM_MEMBERS INNER JOIN
FORUM_TOPICS
ON
FORUM_MEMBERS.MEMBER_ID = FORUM_TOPICS.T_AUTHOR
)
ON
(
FORUM_FORUM.FORUM_ID = FORUM_TOPICS.FORUM_ID
)
AND
(
FORUM_FORUM.CAT_ID = FORUM_TOPICS.CAT_ID
)
)
ON
(
FORUM_TOPICS.CAT_ID = FORUM_CATEGORY.CAT_ID
)
AND
(
FORUM_CATEGORY.CAT_ID = FORUM_FORUM.CAT_ID
)
)
LEFT JOIN FORUM_SUBSCRIPTIONS
ON
FORUM_MEMBERS.MEMBER_ID = FORUM_SUBSCRIPTIONS.MEMBER_ID
ORDER BY
FORUM_CATEGORY.CAT_ORDER,
FORUM_FORUM.F_ORDER,
FORUM_TOPICS.T_LAST_POST DESC



WOW! Any way to simplify that into this = this or that = that

  Nathan Bales - Romans 15:13
----------------------------------

Snitz Exchange | Do's and Dont's
Go to Top of Page

Gremlin
General Help Moderator

New Zealand
7528 Posts

Posted - 24 March 2002 :  00:57:15  Show Profile  Visit Gremlin's Homepage
chkForumModerator could also be changed to setup a list of valid Moderation Forums for the user once per page as I've done with IsAllowedMember above, on some pages this again is saving a large number of DB calls.

EDIT: Add chkForumAccess to that list also. (still working on that one) Once I have active.asp will be down to only about 8 Database calls to show the last months worth of Active Topics ... changes have also had a nice side effect on search.asp too, its doesn't time out on full searchs any longer (well so far - limited testing only)

www.daoc-halo.com

Edited by - Gremlin on 24 March 2002 01:53:50
Go to Top of Page

Nathan
Help Moderator

USA
7664 Posts

Posted - 24 March 2002 :  01:57:32  Show Profile  Visit Nathan's Homepage
Gremlin, wouldn't an easy way to executet this just to put the if structure in the old function that is called so many times?



  Nathan Bales - Romans 15:13
----------------------------------

Snitz Exchange | Do's and Dont's
Go to Top of Page

Nathan
Help Moderator

USA
7664 Posts

Posted - 24 March 2002 :  01:59:04  Show Profile  Visit Nathan's Homepage
quote:

added the following into inc_top.asp to builded a pipe delimited sting of all forums the user has access too e.g |23|34|35|45|



Don't put in inc_top, put it in the top of the files that need it.

If its put in inc_top.asp then it's going to add overhead to files that don't need it.

  Nathan Bales - Romans 15:13
----------------------------------

Snitz Exchange | Do's and Dont's
Go to Top of Page

Gremlin
General Help Moderator

New Zealand
7528 Posts

Posted - 24 March 2002 :  02:02:27  Show Profile  Visit Gremlin's Homepage
quote:

Why dont you use a two dimentional array to store moderator/forum relationships.

  Nathan Bales - Romans 15:13
----------------------------------

Snitz Exchange | Do's and Dont's




You probably could actually build a large multi-dimensional Array of all the info your going to need just once in inc_top.asp (possibly even persist it using Session/Cookies)

So far The really heavy functions that are causing the multitude of DB calls that I've located are

chkForumAccess
chkForumModerator
isAllowedMember

In most cases, for every Topic thats displayed on the screen in either active.asp or search.asp or forum.asp these Functions are being called at least once, in some instances 3 or 4 times. A couple of those functions have 2 separate DB calls in them also.

This is resulting in somewhere around 10-20 unrequired calls out to our database every time a topic is displayed.



www.daoc-halo.com
Go to Top of Page

Nathan
Help Moderator

USA
7664 Posts

Posted - 24 March 2002 :  02:07:57  Show Profile  Visit Nathan's Homepage
Add these two to the list

CheckForUnModeratedPosts <edit> oopsi, forgot this one needs taken care of another way, see my first reply </>
CheckSubscription

It wont be needed in all files, so theres no point in doing it in all files. Add the function to inc_functions and only call it at the top of files that need it.


  Nathan Bales - Romans 15:13
----------------------------------

Snitz Exchange | Do's and Dont's


Edited by - Nathan on 24 March 2002 02:11:53
Go to Top of Page

Gremlin
General Help Moderator

New Zealand
7528 Posts

Posted - 24 March 2002 :  02:14:24  Show Profile  Visit Gremlin's Homepage
quote:

Don't put in inc_top, put it in the top of the files that need it.



Theres not that many pages that I can find that don't call one of the above listed functions already.

quote:

Gremlin, wouldn't an easy way to executet this just to put the if structure in the old function that is called so many times?


hmmm might have been, remember I'm just playing right now to see what can be done, I'm not neccesarily going about it the 'cleanest' or 'purest' way I'm in "Proof of Concept" mode right now.

However, the way I've done it is to remove all of the unrequired calls to those functions by doing it once only in inc_top.asp (which isn't a huge overhead when you consider the 1100 odd calls its just saved from the database in Grazman's example that started this off)

I've then changed the line where the function was previously being called i.e
chkForumModerator(Forum_ID, Session(strCookieURL & "username"))= "1"
to just a simple
If CanModerate = 1
where CanModerate is setup at the top of that page using the
CanModerate = instr(AllowForumList,("|" & fForum_ID & "|",)
structure.

I've refined things a little from my first post as I've gone though so its getting more streamlined. My post was really just a starter for Devs to start looking at a better way of doing these things (if they haven't already fixed them in 3.4 anyway).




www.daoc-halo.com
Go to Top of Page

Gremlin
General Help Moderator

New Zealand
7528 Posts

Posted - 24 March 2002 :  02:15:38  Show Profile  Visit Gremlin's Homepage
quote:

Add these two to the list

CheckForUnModeratedPosts <edit> oopsi, forgot this one needs taken care of another way, see my first reply </>
CheckSubscription

It wont be needed in all files, so theres no point in doing it in all files. Add the function to inc_functions and only call it at the top of files that need it.


  Nathan Bales - Romans 15:13
----------------------------------

Snitz Exchange | Do's and Dont's


Edited by - Nathan on 24 March 2002 02:11:53



Someone else might want to look at them, the 3.3 Version I work with has had all subscriptions and moderation code removed already.

www.daoc-halo.com
Go to Top of Page

Gremlin
General Help Moderator

New Zealand
7528 Posts

Posted - 24 March 2002 :  04:16:46  Show Profile  Visit Gremlin's Homepage
I think this may be able to be cleaned up (saves 1 call per topic to DB for Admins when browsing the boards anyway .. I think heh)


function chkForumAccess(fForum, UserNum)
chkForumAccess = false

strSql = "SELECT " & strMemberTablePrefix & "MEMBERS.M_LEVEL "
strSql = strSql & " FROM " & strMemberTablePrefix & "MEMBERS "
strSql = strSql & " WHERE " & strMemberTablePrefix & "MEMBERS.MEMBER_ID=" & UserNum

Set rsCheck = Server.CreateObject("ADODB.Recordset")
rsCheck.open strSql, my_Conn

if rsCheck.BOF or rsCheck.EOF then
chkForumAccess = false
elseif rsCheck("M_LEVEL") = 3 then
chkForumAccess = true
rsCheck.close
set rsCheck = nothing
exit function
end if
rsCheck.close


This first bit of the Function I think could be changed too


if (mlev = 4) then
chkForumAccess = true
exit function
end if


mLev should always be set already in inc_top.asp to either 0,1,2,3 or 4 so I dont think the function needs to retrieve the level again. The only time this would not be true is in a page that uses inc_top_short.asp. The only pages I can locate that use inc_short are most of the pop_xxxx.asp pages and none of them call this particular function anyway.

www.daoc-halo.com

Edited by - Gremlin on 24 March 2002 04:21:02
Go to Top of Page

Nathan
Help Moderator

USA
7664 Posts

Posted - 24 March 2002 :  04:51:52  Show Profile  Visit Nathan's Homepage
Ummm. . . . thats not true.

mLev is not set in inc_top_short.asp

  Nathan Bales - Romans 15:13
----------------------------------

Snitz Exchange | Do's and Dont's
Go to Top of Page

Gremlin
General Help Moderator

New Zealand
7528 Posts

Posted - 24 March 2002 :  05:15:56  Show Profile  Visit Gremlin's Homepage
Umm thats exactly what I said Nathan

quote:
The only time this would not be true is in a page that uses inc_top_short.asp. The only pages I can locate that use inc_short are most of the pop_xxxx.asp pages and none of them call this particular function anyway.



www.daoc-halo.com
Go to Top of Page

Gremlin
General Help Moderator

New Zealand
7528 Posts

Posted - 24 March 2002 :  08:26:44  Show Profile  Visit Gremlin's Homepage
If your not using Topic Moderation then make sure you switch it off in the Admin Options. This alone reduces the number of queries by around 30%.

Perhaps Allow Topic Moderation could be set to defauly to "off" on a clean install.

After all of the above changes I've noted have been made, I've gone from 1234 DB Calls to get the Last Months Active topics, taking 20 seconds to execute to 10 Calls taking 0.5 seconds Now thats what I call a nice little performance increase

A secondary, but rather nice side effect of these changes has also been the improvement in search.asp.

A standard single keyword search over my forums took 30 seconds and 5725 DB calls before the changes, the same search is now taking 10 seconds and 2103 DB calls.

www.daoc-halo.com

Edited by - Gremlin on 24 March 2002 08:34:30
Go to Top of Page
Page: of 6 Previous Topic Topic Next Topic  
Previous Page | Next Page
 New Topic  Topic Locked
 Printer Friendly
Jump To:
Snitz Forums 2000 © 2000-2021 Snitz™ Communications Go To Top Of Page
This page was generated in 0.19 seconds. Powered By: Snitz Forums 2000 Version 3.4.07