我目前定义了一个7000行的数组,类似这样的:
 
$product_group=array(
    "151932" => "100.00",
    "202123" => "50.00", 
    "166775" => "300.00",
..............
其中KEY就是产品ID,VALUE就是产品价格,这样的话,我每次根据产品ID拿价格的时候,直接用一个数组值的显示就可以了,省去了查询数据库的操作。但总感觉这个数组太大,想象中应该不是很合理,所以我准备将这7000个KEY和VALUE,写入硬盘中,弄7000个文件,需要用到哪个值的话,我就 include() 包含一下,这样会更好些吗?

解决方案 »

  1.   

    呵,刚来两个回复就有分歧了,所以我真不知道要用哪种方式了,我刚开始是用MYSQL查询的,后来才定义到数组中,再后来就想写入磁盘中。难道还是保持不变,就用这个7000个元素的数组来做?
      

  2.   


    snmr_com 可以详细的解释下 为啥不如数据库取吗?
    按你的说法,采用文件缓存是多余的;反而更慢。
      

  3.   

    如果有条件的话,建议使用 redios 或者 memcached 来缓存数据
      

  4.   

    个人认为还是装入mysql的好,其实这个数组也是要读取文件,效率不会比mysql快
      

  5.   

    问题是一读还是多读(指的是打开关闭次数)
    一读文件好,多读数据库好如果你就一个php,运行一次任务(可能做很多事,中间反复使用7000个数据),然后关闭完成,这样当然是文件好,因为实际就一次打开但如果是服务器访问,每个访问者运行同一个php,每次都打开这个文件,读入,分析,计算……结束后关闭,这样IO消耗很厉害的至于说拆开7000个文件,我是不知道怎么回应了,被震住了…… 
      

  6.   

    是呀,我们在实际应用中,比如一些新闻什么的,当访问量大时,也是做成缓存到硬盘上的文件,然后再 include 的那如果MYSQL更快,还做缓存做什么?
    我真不知道该怎么弄了。
      

  7.   

    网站访问量大,肯定是多读了,那看来还是不如用MYSQL了
      

  8.   

    新闻,include是不用计算的,就算要处理,一个字符串变量和7000个单元的数组hash也不是一回事
    两个性质不同,不要比较如果大量数据使用文件更快,甲骨文和google基本可以倒闭了,全部用csv就行了
    尤其是google的搜索引擎,把全世界的网页都缓存就行了,数据库用来干什么
      

  9.   

    有些人有个误区,总认为放到文件里比放在db里效率高。其实都会对磁盘产生i/o,能有多大区别?有些情况放在文件里是为了分担下对db的压力,而不是能减少磁盘i/o。这么大的数组。还是放在db里吧。你放在php脚本里,每次也会有磁盘i/o的产生。你放在php的脚本里,每次php解释这段代码时都要把这个大数组塞进内存里。如果你这个数组放在一个全局的位置,那么每一个php进程不管用不用得到这个数组里面的数据都要装进内存。这对内存是一种浪费。其实对于这种数据,最好是放在第三方内存db里,比如redis,memorycached。或者放在mongo里也行。
      

  10.   

    什么都不用,就放在 mysql 表中,用数据库方式访问因为:
    1、这 7000 行数据,你不可能都用到
    2、即便都用到,你也是用到加工后的数据。据我观察你的这些数据都是离散数据,不加工时不能用的,而在数据库中加工远比php加工高效
    3、mysql 已经提供了内存表,即把表数据放在内存中。查询速度至少是文件型表的10倍
       况且 mysql 管理数据的能力比你自编代码要强百倍以上
      

  11.   


    这位是传说中的唠叨?
    自从PHPX倒闭以后,我好久没见过高手了,呵呵
      

  12.   

    那就决定用MYSQL来存了,查时就根据ID查一条,连做缓存的工作都省了,呵呵
      

  13.   

    还是mysql吧,省去很多麻烦的。
      

  14.   

    才区区7000条数据,MYSQL就不行了?你也太小看MYSQL的处理能力了吧。
    第一,这种KEY VALUE形式的键值对,如果可能,KEY可以作为唯一键的话,那查询数据库的那速度,文件肯定比不了的。
    第二,你确定以后有需要的时候还是只查这两个那么简单的字段出来吗?我就不信不会用到产品图片,产品名,产品属性之类的东西,那到时候你怎么扩展?
    第三,正如版主说的那样,MYSQL在开启缓存的时候,可以对表查询的结构进行缓存,下次同样的请求将会在缓存结果集中查找。
    第四,实在是不想用MYSQL的话,memcache都比文件好百倍!
    以上,个人意见,欢迎砖头!