丁香五月天婷婷国产|91麻豆精品|另类婷婷五月天网站|日韩无码视频中出|无码任你躁久久久|狠狠的搞激情99|草在线观看视频免费|精品999ww网站|久久无码综合一区|一区二区三区四区αα

您好,歡迎來到中國企業(yè)庫   [請登陸]  [免費注冊]
小程序  
APP  
微信公眾號  
手機版  
 [ 免責聲明 ]     [ 舉報 ]
客服電話:13631151688
企業(yè)庫首頁>資訊
行業(yè)
超級獵聘人才網 廣告

網站改版常見問題答疑

作者:成都佳薇科技有限公司 來源:cici1949 發(fā)布時間:2015-06-26 瀏覽:205

最近常有廈門的客戶通過網站上的聯系我,詢問網站改版的情況。幾乎每日都要針對客戶網站存在的問題做一番分析,然后客戶以價格等其他因素結束對話,如此反復,實在煩人。

  為此做一個內容整理,希望很多只是想了解或者參考資料而不準備花錢改版的客戶也不枉此行吧。言歸正傳。

  一般客戶要求對網站改版,無非存在以下原因:

  對網站美工不滿意;

  對網站框架(欄目)結構不滿意;

  對網站在搜索引擎的排名不滿意,希望做一些優(yōu)化;

  網站年久失修,沒人回復,需要徹底重做。。。

  大凡有此需求的客戶,都應該值得贊許,至少他們已經認可了網絡可以為他們帶來一定的信息幫助。同時他們應該也從網絡中反饋到很多信息,因此才希望對自身網站進行升級改版。


  根據與客戶的溝通得出,一般網站改版包含四個部分:

  網站整體風格改版(美工);

  網站內部代碼程序重寫(程序);

  以上二者兼顧;

  網站優(yōu)化,包括搜索引擎優(yōu)化及網站內部優(yōu)化更易瀏覽。要做到這些,所以都必須以用戶體驗為最終目標。網站不是我們的客戶說怎么樣就怎么樣的,而應該是給最終瀏覽者去體驗的,也就是說改版過的網站應該更容易被搜索到,更容易訪問,更容易使用(訪客使用和網站管理員使用)。

  那么首先{dy}步,應該詢問我們的客戶對目前網站不滿意的地方,成都網絡推廣以及他們的客戶反饋過來的信息;然后,我們對客戶的網站進行剖析,將存在的問題以圖表的形式羅列出來;提出我們的解決方案,與客戶探討。然后就是報價。

  至于第二、第三步,很多客戶都會要求你越詳細越好。而{dy}步呢,客戶有時候不愿意說出來或者他根本說不出來。因此需要我們去引導客戶。然而到了第四步,就很tt,很多客戶,他們更關心價格,或者說他們最希望的價格越低越好,然后才是效果問題。所以,現在都不是很愿意去回答第二、第三個問題了??赡苓@個也是個人業(yè)務能力的問題吧??傊芏嗫蛻魰f,

  “你的見解很好,我們會很中肯的去接受,但是你的價格我們沒辦法接受,還是很感謝你的!”


這兩天發(fā)現我運營的一個門戶網站出現了數據無法寫入的問題,新會員不能注冊,信息不能發(fā)布,不能正常登陸會員系統,實在找不到原因,覺定還原備份數據庫,但在恢復mssql數據庫過程過程中,提示數據庫日志滿已滿,請清空數據庫日志后,還原。我想可能就是這個原因導致數據不能正常的寫入,然后就baidu搜索了相關的信息,終于找到了原因,程序運行完,修復成功,今天把源代碼公布出來,希望對大家有所幫助,大家以后出現相似問題不防也采有清空數據庫日志的方法,可以也會解決相似問題,清空數據庫日志不會對服務器數據有所損害,能解決數據庫不能寫入的原因,代碼如下:  

'sql數據庫連接參數:數據庫名(SqlDatabaseName)、用戶密碼(SqlPassword)、用戶名(SqlUsername)、

  '連接名(SqlLocalName)(本地用local,外地用IP)

  Const SqlDatabaseName = "數據庫名稱"

  Const SqlPassword = "數據庫用戶密碼"

  Const SqlUsername = "數據庫用戶名"

  Const SqlLocalName = "數據庫服務器" '如果服務器是本機,可以設置為:(local),如果是遠程要設置數據庫ip地址

  '以下內容請不要修改

  Dim ConnStr

  ConnStr = "Provider = Sqloledb; User ID = " & SqlUsername & "; Password = " & SqlPassword & "; Initial Catalog = " &

  SqlDatabaseName & "; Data Source = " & SqlLocalName & ";"

  Set conn = Server.CreateObject("ADODB.Connection")

  conn.open ConnStr

  conn.execute("DUMP TRANSACTION " & SqlDatabaseName & " WITH NO_LOG")

  conn.execute("DBCC SHRINKDATABASE(" & SqlDatabaseName & ")")

  conn.close

  set conn=nothing

  Response.Write "您的mssql數據庫日志已清空。"

  %>

        以上代碼針對與mssql數據庫,支持asp的空間而定,把以上代碼保存為某某名字.asp,然后在在輸入保存的網頁地址,程序運行自動清空數據庫日志,wm解決數據庫無法寫入的問題,希望以上代碼對seo站長們有所幫助,謝謝。


系統主要是構建在hibernate之上的高效數據庫緩存系統,其中包含了分布式解決方案,該系統已經應用在舍得網上了,沒有發(fā)現大問題,本人也相信該系統已經足夠強大,應付數百萬IP/天的應用都不是問題。

  代碼看上去很簡單,其實卻是兩年經驗的總結,整過過程也遇到了很多難點,{zh1}一一解決了。本系統非常簡潔易用,主程序BaseManager.java不到1000行代碼,用“精悍”來形容{jd1}不為過,1000行代碼卻包含了數據庫對象的緩存、列表和長度的緩存、按字段散列緩存、update延時更新、自動qc列表緩存等功能,用它來實現像論壇、博客、校友錄、交友社區(qū)等絕大部分應用網站都足夠了。

  現在進入正題。。。。。

  為什么要用緩存?如果問這個問題說明你還是新手,數據庫吞吐量畢竟有限,每秒讀寫5000次了不起了,如果不用緩存,假設一個頁面有100個數據庫操作,50個用戶并發(fā)數據庫就歇菜,這樣最多能支撐的pv也就50*3600*15=270萬,而且數據庫服務器累得半死,搞不好什么時候就累死了。我的這套緩存系統比單獨用memcached做緩存還要強大,相當于在memcached上再做了兩級緩存,大家都知道m(xù)emcached很強了,但是吞吐量還是有限,每秒20000次get和put當遇到超大規(guī)模的應用時還是會歇菜,本地HashMap每秒可執(zhí)行上百萬次put和get,在這上面損耗的性能幾乎可以忽略不記了。溫馨提示:能不用分布式的時候就不要用分布式,非用分布式的時候再考慮用memcached,我的緩存系統在這方面都已經實現了,改個配置就可以了,有興趣的可以仔細測試測試!

  一般數據庫緩存在我看來包含四種。{dy}種:單個對象的緩存(一個對象就是數據庫一行記錄),對于單個對象的緩存,用HashMap就可以了,稍微復雜一點用LRU算法包裝一個HashMap,再復雜一點的分布式用memcached即可,沒什么太難的;第二種:列表緩存,就像論壇里帖子的列表;第三種:長度的緩存,比如一個論壇板塊里有多少個帖子,這樣才方便實現分頁。第四種:復雜一點的group,sum,count查詢,比如一個論壇里按點擊數排名的最HOT的帖子列表。{dy}種比較好實現,后面三種比較困難,似乎沒有通用的解決辦法,我暫時以列表緩存(第二種)為例分析。

  mysql和hibernate的底層在做通用的列表緩存時都是根據查詢條件把列表結果緩存起來,但是只要該表的記錄有任何變化(增加/刪除/修改),列表緩存要全部qc,這樣只要一個表的記錄經常變化(通常情況都會這樣),列表緩存幾乎失效,命中率太低了。

  本人想了一個辦法改善了列表緩存,當表的記錄有改變時,遍歷所有列表緩存,只有那些被影響到的列表緩存才會被刪除,而不是直接qc所有列表緩存,比如在一個論壇版(id=1)里增加了一個帖子,那么只要qcid=1這個版對應的列表緩存就可以了,版id=2就不用qc了。這樣處理有個好處,可以緩存各種查詢條件(如等于、大于、不等于、小于)的列表緩存,但也有個潛在的性能問題,由于需要遍歷,CPU符合比較大,如果列表緩存{zd0}長度設置成10000,兩個4核的CPU每秒也只能遍歷完300多次,這樣如果每秒有超過300個insert/update/delete,系統就吃不消了,此路不通。

  在前面兩種解決辦法都不wm的情況下,本人和同事經過幾個星期的思索,總算得出了根據表的某幾個字段做散列的緩存辦法,這種辦法無需大規(guī)模遍歷,所以CPU符合非常小,由于這種列表緩存按照字段做了散列,所以命中率極高。思路如下:每個表有3個緩存Map(key=value鍵值對),{dy}個Map是對象緩存A,在A中,key是數據庫的id,Value是數據庫對象(也就是一行數據);第二個Map是通用列表緩存B,B的{zd0}長度一般1000左右,在B中,key是查詢條件拼出來的String(如start=0,length=15#active=0#state=0),Value是該條件查詢下的所有id組成的List;第三個Map是散列緩存C,在C中,key是散列的字段(如根據userId散列的話,其中某個key就是userId=109這樣的String)組成的String,value是一個和B類似的HashMap。其中只有B這個Map是需要遍歷的,不知道說明白了沒有,看完小面這個例子應該就明白了,就用論壇的回復表作說明,假設回復表T中假設有字段id,topicId,postUserId等字段(topicId就是帖子的id,postUserId是發(fā)布者id)。

  {dy}種情況,也是最常用的情況,就是獲取一個帖子對應的回復,sql語句應該是象

  select id from T where topicId=2008 order by createTime desc limit 0,5

  select id from T where topicId=2008 order by createTime desc limit 5,5

  select id from T where topicId=2008 order by createTime desc limit 10,5

  的樣子,那么這種列表很顯然用topicId做散列是{zh0}的,把上面三個列表緩存(可以是N個)都散列到key是topicId=2008這一個Map中,當id是2008的帖子有新的回復時,系統自動把key是topicId=2008的散列Mapqc即可。由于這種散列不需要遍歷,因此可以設置成很大,例如100000,這樣10萬個帖子對應的所有回復列表都可以緩存起來,當有一個帖子有新的回復時,其余99999個帖子對應的回復列表都不會動,緩存的命中率極高。

  第二種情況,就是后臺需要顯示{zx1}的回復,sql語句應該是象

  select id from T order by createTime desc limit 0,50

  的樣子,這種情況不需要散列,因為后臺不可能有太多人訪問,常用列表也不會太多,所以直接放到通用列表緩存B中即可。

  第三種情況,獲取一個用戶的回復,sql語句象

  select id from T where userId=2046 order by createTime desc limit 0,15

  select id from T where userId=2046 order by createTime desc limit 15,15

  select id from T where userId=2046 order by createTime desc limit 30,15

  的樣子,那么這種列表和{dy}種情況類似,用userId做散列即可。

  第四種情況,獲取一個用戶對某個帖子的回復,sql語句象

  select id from T where topicId=2008 and userId=2046 order by createTime desc limit 0,15

  select id from T where topicId=2008 and userId=2046 order by createTime desc limit 15,15

  的樣子,這種情況比較少見,一般以topicId=2008為準,也放到key是topicId=2008這個散列Map里即可。

  那么{zh1}的緩存結構應該是下面這個樣子:

  緩存A是:

  Key鍵(long型)Value值(類型T)

  11Id=11的T對象

  22Id=22的T對象

  133Id=133的T對象

  ……

  列表緩存B是:

  Key鍵(String型)Value值(ArrayList型)

  from T order by createTime desc limit 0,50ArrayList,對應取出來的所有id

  from T order by createTime desc limit 50,50ArrayList,對應取出來的所有id

  from T order by createTime desc limit 100,50ArrayList,對應取出來的所有id

  ……

  散列緩存C是:

  Key鍵(String型)Value值(HashMap)

  userId=2046Key鍵(String型)Value值(ArrayList)

  userId=2046#0,5id組成的List

  userId=2046#5,5id組成的List

  userId=2046#15,5id組成的List

  ……

  userId=2047Key鍵(String型)Value值(ArrayList)

  userId=2047#0,5id組成的List

  userId=2047#5,5id組成的List

  userId=2047#15,5id組成的List

  ……

  userId=2048Key鍵(String型)Value值(ArrayList)

  userId=2048#topicId=2008#0,5id組成的List

  userId=2048#5,5id組成的List

  userId=2048#15,5id組成的List

  ……

  ……

  總結:這種緩存思路可以存儲大規(guī)模的列表,緩存命中率極高,因此可以承受超大規(guī)模的應用,但是需要技術人員根據自身業(yè)務邏輯來配置需要做散列的字段,一般用一個表的索引鍵做散列(注意順序,最散的字段放前面),假設以userId為例,可以存儲N個用戶的M種列表,如果某個用戶的相關數據發(fā)生變化,其余N-1個用戶的列表緩存紋絲不動。以上說明的都是如何緩存列表,緩存長度和緩存列表思路wq一樣,如緩存象select count(*) from T where topicId=2008這樣的長度,也是放到topicId=2008這個散列Map中。如果再配合好使用mysql的拆表和memcached,加上F5設備做分布式負載均衡,該系統對付像1000萬IP/天這種規(guī)模級的應用都足夠了。




鄭重聲明:資訊 【網站改版常見問題答疑】由 成都佳薇科技有限公司 發(fā)布,版權歸原作者及其所在單位,其原創(chuàng)性以及文中陳述文字和內容未經(企業(yè)庫www.5ix2s.cn)證實,請讀者僅作參考,并請自行核實相關內容。若本文有侵犯到您的版權, 請你提供相關證明及申請并與我們聯系(qiyeku # qq.com)或【在線投訴】,我們審核后將會盡快處理。
會員咨詢QQ群:902340051 入群驗證:企業(yè)庫會員咨詢.
免費注冊只需30秒,立刻尊享
免費開通旗艦型網絡商鋪
免費發(fā)布無限量供求信息
每天查看30萬求購信息