คำถามติดแท็ก caching

คำถามเกี่ยวกับอัลกอริทึมแคชตามแอปพลิเคชันและการใช้งานแคชข้อมูลโดยเอ็นจิ้นฐานข้อมูลและแอปพลิเคชันที่เก็บข้อมูลและการนำเสนออื่น ๆ

13
ดังนั้นซิงเกิลตันก็แย่แล้วอะไรนะ?
มีการถกเถียงกันมากมายเกี่ยวกับปัญหาการใช้ซิงเกิลตัน (และการใช้งานมากเกินไป) ฉันเป็นหนึ่งในคนเหล่านั้นก่อนหน้านี้ในอาชีพของฉันเช่นกัน ฉันสามารถดูได้ว่าปัญหาคืออะไรในตอนนี้และยังมีอีกหลายกรณีที่ฉันไม่สามารถมองเห็นทางเลือกที่ดีได้ - และการอภิปรายต่อต้านซิงเกิลจำนวนมากไม่ได้ให้สิ่งหนึ่ง นี่คือตัวอย่างจริงจากโครงการล่าสุดที่สำคัญที่ฉันเข้าร่วม: แอปพลิเคชั่นนี้เป็นไคลเอนต์ที่มีหน้าจอและส่วนประกอบแยกต่างหากจำนวนมากซึ่งใช้ข้อมูลจำนวนมากจากสถานะเซิร์ฟเวอร์ซึ่งไม่ได้อัปเดตบ่อยเกินไป ข้อมูลนี้ถูกแคชในวัตถุ "ผู้จัดการ" ของซิงเกิล - สถานะ "ส่วนกลาง" ที่น่าสะพรึงกลัว แนวคิดคือให้มีที่นี่ในแอปที่เก็บข้อมูลและซิงค์จากนั้นหน้าจอใหม่ใด ๆ ที่เปิดขึ้นสามารถสืบค้นสิ่งที่ต้องการจากที่นั่นได้โดยไม่ต้องทำคำขอซ้ำสำหรับข้อมูลสนับสนุนต่าง ๆ จากเซิร์ฟเวอร์ การร้องขอไปยังเซิร์ฟเวอร์อย่างต่อเนื่องจะใช้แบนด์วิดท์มากเกินไป - และฉันกำลังพูดถึงค่าใช้จ่ายอินเทอร์เน็ตเพิ่มเติมหลายพันดอลลาร์ต่อสัปดาห์ดังนั้นจึงเป็นที่ยอมรับไม่ได้ มีวิธีอื่นที่เหมาะสมกว่าที่นี่โดยทั่วไปแล้วมีวัตถุแคชตัวจัดการข้อมูลระดับโลกหรือไม่ แน่นอนว่าวัตถุนี้ไม่จำเป็นต้องเป็น "ซิงเกิลตัน" อย่างเป็นทางการ แต่มันต้องใช้ความคิดเป็นหลัก อะไรคือทางเลือกที่สะอาดดีที่นี่

6
เหตุใดหน่วยความจำแคช CPU จึงเร็ว
อะไรทำให้หน่วยความจำแคช CPU เร็วกว่าหน่วยความจำหลักมาก ฉันเห็นประโยชน์บางอย่างในระบบแคชแบบทำเป็นชั้น ทำให้รู้สึกว่าแคชที่เล็กลงนั้นเร็วกว่าการค้นหา แต่ต้องมีมากกว่านี้
58 memory  caching 

3
การแคชที่ชั้นธุรกิจเทียบกับการแคชที่ชั้นข้อมูล
ฉันมักจะทำงานในโครงการที่ทำแคชบน DAL โดยทั่วไปเมื่อคุณกำลังจะโทรไปยังฐานข้อมูลนั้นจะตรวจสอบว่าข้อมูลมีอยู่ในแคชแล้วหรือไม่และถ้าเป็นเช่นนั้นก็ไม่ได้ทำการโทรและ ส่งคืนข้อมูลนั้นแทน ฉันเพิ่งอ่านเกี่ยวกับการแคชที่ชั้นธุรกิจดังนั้นโดยทั่วไปแล้วการแคชวัตถุธุรกิจทั้งหมด ข้อดีอย่างหนึ่งที่ฉันเห็นได้ทันทีคือเวลาตอบสนองที่ดีกว่ามาก เมื่อไหร่ที่คุณจะชอบอีกอันหนึ่ง? และการแคชที่ชั้นธุรกิจเป็นเรื่องธรรมดาหรือไม่

9
เจ้าหน้าที่ QA จะทดสอบตรรกะการแคชที่พวกเขามองไม่เห็นได้อย่างไร
ฉันเพิ่งนำเลเยอร์แคชไปใช้ในเว็บแอปพลิเคชันของฉันและตอนนี้ฉันสงสัยว่า QA นั้นควรทดสอบอย่างไรเนื่องจากการแคชนั้นโปร่งใสสำหรับผู้ใช้ หนึ่งความคิดที่ฉันมีคือการใส่การบันทึกในวิธีการที่เรียกใช้รหัสที่เติมแคชและบันทึกเมื่อวัตถุถูกดึงออกมาจากแคชและเมื่อมันต้องการนันทนาการจากฐานข้อมูลจากนั้นผู้ทดสอบสามารถดูบันทึกเพื่อดูว่า ตัวอย่างเช่นวัตถุบางอย่างถูกโหลดใหม่จาก db ทุก ๆ 10 นาทีแทนที่จะดูทุกหน้า แต่ทุกคนสามารถแนะนำวิธีปฏิบัติที่ดีกว่าสำหรับสถานการณ์นี้ได้ไหม
33 testing  caching 

2
การเขียนความหน่วงต่ำ Java [ปิด]
มีเทคนิคเฉพาะ Java (สิ่งที่จะไม่ใช้กับ C ++) สำหรับการเขียนรหัส latency ต่ำใน Java? ฉันมักจะเห็นบทบาทที่มีความล่าช้าต่ำของ Java และพวกเขาขอประสบการณ์ในการเขียน Java ที่มีความหน่วงต่ำซึ่งบางครั้งก็ดูเหมือนเป็นช่วงเวลาสั้น ๆ เพียงคิดว่าฉันสามารถคิดว่าเป็นประสบการณ์กับ JNI จ้าง I / O โทรไปยังรหัสพื้นเมือง อาจเป็นไปได้ที่จะใช้รูปแบบการทำลายซึ่งไม่ใช่เทคโนโลยีจริง มีเคล็ดลับเฉพาะ Java สำหรับการเขียนรหัส latency ต่ำหรือไม่ ฉันรู้ว่ามี Java Real Time แบบเรียลไทม์ แต่ฉันถูกเตือนแบบเรียลไทม์ไม่เหมือนกับ latency ต่ำ ....

3
การจัดการกับแคชเบราว์เซอร์ในแอพหน้าเดียว
ฉันกำลังพยายามหาวิธีจัดการแคชของเว็บเบราว์เซอร์สำหรับแอปหน้าเดียวอย่างถูกต้อง ฉันมีการออกแบบที่ค่อนข้างธรรมดา: ไฟล์ HTML, JS และ CSS หลายตัวที่ใช้งานสปาและมีข้อมูล JSON มากมายที่สปาใช้ ปัญหาเกิดขึ้นเมื่อฉันต้องการผลักดันการอัปเดต: ฉันอัปเดตส่วนคงที่ของเว็บไซต์และรหัสที่สร้าง JSON ในเวลาเดียวกัน แต่เบราว์เซอร์ไคลเอนต์มักจะมีส่วนคงที่แคชดังนั้นรหัสเก่าพยายามประมวลผลข้อมูลใหม่และ อาจ (ขึ้นอยู่กับการเปลี่ยนแปลงที่ทำ) อาจมีปัญหา (โดยเฉพาะอย่างยิ่งดูเหมือนว่า IE จะก้าวร้าวมากกว่า Chrome หรือ Firefox เกี่ยวกับการใช้แคช JS โดยไม่ต้องทำการตรวจสอบซ้ำ) วิธีที่ดีที่สุดในการจัดการกับสิ่งนี้คืออะไร? ตรวจสอบให้แน่ใจว่าการเปลี่ยนแปลง JSON ของฉันเข้ากันได้ย้อนหลังและถือว่าแคชของเบราว์เซอร์จะหมดอายุในระยะเวลาที่เหมาะสม ฝังหมายเลขรุ่นบางส่วนในทั้ง JS แบบคงที่และ JSON จากนั้นเรียกใช้งานwindow.location.reload(true);หากไม่ตรงกัน ค้นหาชุดค่าผสมที่เหมาะสมของส่วนหัว ( must-revalidateหรือno-cacheอะไรก็ตามแหล่งที่มา แตกต่างกันไปตามวิธีการทำ) เพื่อให้แน่ใจว่าเบราว์เซอร์จะตรวจสอบความถูกต้องของทรัพยากรทั้งหมดในทุก ๆ ครั้งที่โหลดซ้ำแม้ว่ามันจะหมายถึง จัดการการควบคุมแคชของฉันและหมดอายุส่วนหัวเพื่อให้เนื้อหาแบบคงที่หมดอายุเมื่อฉันต้องการผลักดันการอัปเดต อื่น ๆ อีก?

6
แนวปฏิบัติที่เหมาะสมที่สุดสำหรับวิธีทดสอบหน่วยที่ใช้แคชอย่างหนัก
ฉันมีวิธีการทางตรรกะทางธุรกิจจำนวนมากที่เก็บและดึงข้อมูล (พร้อมการกรอง) วัตถุและรายการวัตถุจากแคช พิจารณา IList<TObject> AllFromCache() { ... } TObject FetchById(guid id) { ... } IList<TObject> FilterByPropertry(int property) { ... } Fetch..และFilter..จะเรียกAllFromCacheซึ่งจะเติมแคชและส่งคืนถ้ามันไม่ได้มีและเพียงแค่กลับมาจากมันถ้ามันเป็น ฉันมักจะอายห่างจากการทดสอบหน่วยเหล่านี้ แนวปฏิบัติที่ดีที่สุดสำหรับการทดสอบหน่วยกับโครงสร้างประเภทนี้คืออะไร ฉันถือว่าการเติมแคชใน TestInitialize และลบบน TestCleanup แต่นั่นไม่รู้สึกว่าถูกต้องสำหรับฉัน (อาจเป็นได้)

1
ทำไมบางเว็บไซต์แสดง 0 bytes ในเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ของ Chrome
ฉันกำลังทำการเพิ่มประสิทธิภาพความเร็วหน้าสำหรับเว็บไซต์ของฉันและศึกษาว่าเว็บไซต์อื่น ๆ ทำได้อย่างไร ฉันสังเกตเห็นว่าบางเว็บไซต์เช่นFacebookหรือRinggitplusแสดง 0 ไบต์สำหรับบางแหล่งข้อมูลในเครื่องมือสำหรับนักพัฒนาของ Chrome แท็บเครือข่ายในขณะที่ขนาดเนื้อหาจริงมีหลายกิโลไบต์ ฉันอ่านบางบทความที่บอกว่าขนาดคือจำนวนเงินที่ถูกดึงออกมาและเนื้อหาคือขนาดจริงของการตอบสนอง ดังนั้นเมื่อขนาดคือ 0 ไบต์ก็หมายความว่ามันทำหน้าที่จากแคช แต่สิ่งเดียวกันนี้เกิดขึ้นเมื่อฉันเปิดหน้าโดยใช้ไม่ระบุตัวตนหรือล้างแคชทั้งหมดของฉัน สิ่งนี้เป็นไปได้อย่างไรและฉันจะบรรลุสิ่งเดียวกันสำหรับเว็บไซต์ของฉันได้อย่างไร
14 http  caching  chrome 

2
Shared Cache - แนวทางปฏิบัติที่ไม่ถูกต้อง
ฉันอยากจะรู้ว่าอะไรจะเป็นวิธีที่ดีกว่าในการทำให้วัตถุแคช / อัปเดตเป็นโมฆะ ข้อกำหนดเบื้องต้น มีเซิร์ฟเวอร์ memcached ระยะไกล (ทำหน้าที่เป็นแคชสำหรับหลาย ๆ แอปพลิเคชัน) เซิร์ฟเวอร์ทั้งหมดโฮสต์โดย Azure (ภูมิภาคที่สัมพันธ์กัน, ดาต้าเซ็นเตอร์เดียวกัน) ขนาดวัตถุแคชมีตั้งแต่ 200 ไบต์จนถึง 50 กิโลไบต์ วิธีที่ 1 (เก็บในแคชโดยเร็ว) สร้างวัตถุ A -> store ในฐานข้อมูลและเก็บไว้ในแคช วัตถุ A ที่ไคลเอนต์ร้องขอ -> ตรวจสอบแคชเพื่อการมีอยู่ของระบบมิฉะนั้นดึงข้อมูลจากฐานข้อมูลและเก็บไว้ในแคช วัตถุ A รับการอัพเดท -> จัดเก็บในฐานข้อมูลจัดเก็บในแคช วิธีที่ 1 ดูเหมือนจะตรงไปตรงมามากกว่า หากมีการสร้างบางสิ่งให้ใส่แคชโดยเร็ว ไม่ว่าจะมีใครบางคนจะต้องการมัน วิธีที่ 2 (สันหลังยาวแคชสโตร์) สร้างวัตถุ A -> store ในฐานข้อมูลแล้ว …

2
การใช้ Memcached: เป็นการดีหรือไม่ที่จะอัพเดตแคชเมื่อทำการอัพเดตฐานข้อมูล?
คำถามนี้เกี่ยวกับหลักปฏิบัติที่ดีที่สุดในสถาปัตยกรรม สถาปัตยกรรมปัจจุบันของเรา ฉันมีคลาส PHP ที่เข้าถึง MySQL สำหรับข้อมูลผู้ใช้ Userขอเรียกว่า Userมีการเข้าถึงหลายครั้งดังนั้นเราจึงติดตั้งเลเยอร์ของแคชเพื่อลดภาระ เลเยอร์แรกคือสิ่งที่เราเรียกว่าแคช "ต่อคำขอ" หลังจากที่ข้อมูลได้รับการเรียกข้อมูลจาก MySQL, Userเราเก็บข้อมูลในทรัพย์สินส่วนตัวของ การร้องขอใด ๆ ที่ตามมาสำหรับข้อมูลจะส่งคืนคุณสมบัติแทนการร้องขอข้อมูลจาก MySQL อีกครั้ง เนื่องจากคำขอทางเว็บนั้นใช้งานและตายต่อการร้องขอแคชนี้จะป้องกันไม่ให้แอปพลิเคชันเข้าถึง MySQL มากกว่าหนึ่งครั้งในคำขอเดียว ชั้นที่สองของเราคือ Memcached เมื่อคุณสมบัติส่วนตัวว่างเปล่าก่อนอื่นเราตรวจสอบ Memcached สำหรับข้อมูล หาก Memcached ว่างเรา MySQL แบบสอบถามสำหรับข้อมูลที่ปรับปรุง memcached Userและปรับปรุงทรัพย์สินส่วนตัวของ คำถาม แอปพลิเคชันของเราเป็นเกมและบางครั้งจำเป็นที่ข้อมูลบางอย่างจะเป็นข้อมูลล่าสุด ในช่วงเวลาประมาณห้านาทีคำขอการอ่านสำหรับข้อมูลผู้ใช้อาจเกิดขึ้น 10 หรือ 11 ครั้ง; จากนั้นการอัปเดตอาจเกิดขึ้น คำขอการอ่านครั้งต่อไปจะต้องทันสมัยหรือกลไกของเกมล้มเหลว ดังนั้นสิ่งที่เราทำคือการใช้รหัสที่ดำเนินการเมื่อมีการอัพเดทฐานข้อมูล รหัสนี้ตั้งค่าคีย์ใน Memcached พร้อมข้อมูลที่อัปเดตดังนั้นการร้องขอต่อ Memcached ที่ตามมาทั้งหมดเป็นข้อมูลล่าสุด สิ่งนี้ดีที่สุดหรือไม่? …

4
อะไรเป็นสิ่งสำคัญเมื่อปรับแต่งแคช CPU (ใน C)
อ่านหนังสือเหล่านี้สองคำถามผมเห็นว่าพฤติกรรมของแคช CPU เข้าใจสามารถที่สำคัญเมื่อต้องรับมือกับข้อมูลจำนวนมากในหน่วยความจำ ฉันต้องการเข้าใจวิธีการทำงานของแคชเพื่อเพิ่มเครื่องมืออื่นลงในกล่องเครื่องมือเพิ่มประสิทธิภาพของฉัน ประเด็นหลักเกี่ยวกับวิธีการทำงานของแคช CPU เพื่อให้ฉันสามารถเขียนโค้ดที่ใช้อย่างสมเหตุสมผลได้อย่างไร มีวิธีในการรหัสโปรไฟล์เพื่อดูว่าการใช้แคชที่ไม่ดีกำลังทำให้ช้าลงหรือไม่?

3
ทำไมคำขอเนื้อหาคงที่ถูกส่งไปยังเว็บไซต์อื่น
เมื่อใดก็ตามที่ฉันเข้าสู่ระบบเพื่อ stackoverflow http://cdn.sstatic.net/หรือเว็บไซต์บางอย่างที่ฉันเห็นจำนวนของการร้องขอสำหรับเว็บไซต์เช่น ทำไมจึงทำเช่นนี้แทนที่จะให้บริการโดยตรงจากเว็บไซต์จริง? มันช่วยเร่งความเร็วเว็บไซต์ได้อย่างไร

2
แคชหมดอายุแบบสุ่ม
ฉันกำลังทดลองกับเวลาแคชแบบสุ่มเพื่อหลีกเลี่ยงสถานการณ์ที่คำขอแต่ละรายการบังคับให้หลายสิ่งหลายอย่างอัปเดตพร้อมกัน ตัวอย่างเช่นหน้าเว็บอาจมีห้าองค์ประกอบที่แตกต่างกัน หากตั้งค่าการหมดเวลาเป็น 30 นาทีผู้ใช้จะมีเวลารอนานทุก 30 นาที ดังนั้นคุณจึงตั้งค่าทั้งหมดให้เป็นเวลาสุ่มระหว่าง 15 ถึง 45 นาทีเพื่อให้เป็นไปได้มากที่สุดเพียงองค์ประกอบเดียวที่จะโหลดซ้ำสำหรับการโหลดหน้าเว็บที่กำหนด ฉันพยายามค้นหางานวิจัยหรือคำแนะนำในหัวข้อนี้เช่นพารามิเตอร์ความแปรปรวนที่ดีที่สุด ฉันจำได้ว่าเคยเห็นบทความหนึ่งเกี่ยวกับวิธีที่ Google (?) ใช้เทคนิคนี้ แต่ไม่สามารถค้นหาได้และดูเหมือนจะไม่ได้เขียนเกี่ยวกับหัวข้อมากนัก

5
วิธีหลีกเลี่ยงการละเมิด SRP ในชั้นเรียนเพื่อจัดการแคช?
หมายเหตุ:ตัวอย่างโค้ดเขียนด้วย c # แต่นั่นไม่ควรสำคัญ ฉันใส่ c # เป็นแท็กเพราะหาแท็บไม่ได้อีก นี่คือเกี่ยวกับโครงสร้างรหัส ฉันอ่าน Clean Code และพยายามเป็นโปรแกรมเมอร์ที่ดีขึ้น ฉันมักจะพบว่าตัวเองกำลังดิ้นรนเพื่อทำตามหลักการความรับผิดชอบเดียว (ชั้นเรียนและฟังก์ชั่นควรทำเพียงสิ่งเดียว) โดยเฉพาะอย่างยิ่งในฟังก์ชั่น บางทีปัญหาของฉันคือ "สิ่งหนึ่ง" ไม่ชัดเจน แต่ก็ยัง ... ตัวอย่าง: ฉันมีรายการ Fluffies ในฐานข้อมูล เราไม่สนใจว่าปุยคืออะไร ฉันต้องการชั้นเรียนเพื่อกู้คืนความผิดปกติ อย่างไรก็ตาม fluffies สามารถเปลี่ยนแปลงได้ตามตรรกะบางอย่าง คลาสนี้จะส่งคืนข้อมูลจากแคชหรือรับข้อมูลล่าสุดจากฐานข้อมูลทั้งนี้ขึ้นอยู่กับตรรกะบางอย่าง เราสามารถพูดได้ว่ามันจัดการกับความฟู่ฟ่าและนั่นคือสิ่งหนึ่ง เพื่อให้ง่ายสมมติว่าข้อมูลที่โหลดนั้นดีสำหรับหนึ่งชั่วโมงจากนั้นจะต้องโหลดใหม่ class FluffiesManager { private Fluffies m_Cache; private DateTime m_NextReload = DateTime.MinValue; // ... public Fluffies GetFluffies() { …

5
อัลกอริทึมการเปลี่ยนแคชที่มีประสิทธิภาพมากที่สุด [ปิด]
ปิด คำถามนี้ต้องการรายละเอียดหรือความคมชัด ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ เพิ่มรายละเอียดและชี้แจงปัญหาโดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา วิกิพีเดียแสดงรายการ 11 ขั้นตอนวิธีการเปลี่ยนแคช สมมติว่าฉันไม่รู้อะไรเกี่ยวกับแอปพลิเคชันที่ฉันจะพัฒนาฉันควรใช้อะไรเป็นอัลกอริทึมการแทนที่แคช "เริ่มต้น" ถ้าฉันจำได้อย่างถูกต้องจากระบบปฏิบัติการของฉัน LRU เป็นอัลกอริทึมการแทนที่แคชทั่วไปที่ดีที่สุด แต่บางทีฉันเข้าใจผิด นอกจากนี้นี่เป็นคำถามเชิงวิชาการเล็กน้อยเนื่องจากโดยทั่วไปหน่วยความจำหลักมีราคาถูกและมีมากมายและฉันไม่ต้องกังวลเกี่ยวกับขนาดแคชมากเกินไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.