V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
letitbesqzr
V2EX  ›  MySQL

sphinx 在多表的情况下如何检索出具体数据

  •  
  •   letitbesqzr · 2014-08-11 16:20:15 +08:00 · 6287 次点击
    这是一个创建于 3768 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在sphinx.conf里面定义了多个sourc对应多个index (每个index对应一个source)
    看了半天文档,只发现有一个 sql_query_info的参数,设置为:
    ```
    sql_query_info = select * from `表名` where id = $id
    ```

    但发现只在search.exe也就是cmd测试下才会去执行...用api调用不会执行这个..
    看到网上的例子,都是通过查询出来的id值然后链接mysql去查询...我这每个表的名字都没有规律,id值也没有规律..请问有没有办法能让api调用输出的时候带上是哪个source的结果..或者直接能输出其他字段的内容,而不是只输出id
    17 条回复    2014-08-12 12:28:54 +08:00
    bjzhush
        1
    bjzhush  
       2014-08-11 16:24:12 +08:00   ❤️ 1
    我之前做的是所有表的主键id都是连续的
    比如 data_1 1-100W
    data_2 100W-200W
    data_3 200W-300W
    这样检索出来id,就知道结果在哪个表了
    bjzhush
        2
    bjzhush  
       2014-08-11 16:25:44 +08:00   ❤️ 1
    以上我的做法是1个index对应多个source的
    如果是1个source对应1个index,其实source的表名就是确定了的,各自分别配置就可以了
    不过分的太多了,估计你查询起来不是太方便吧?
    letitbesqzr
        3
    letitbesqzr  
    OP
       2014-08-11 16:33:00 +08:00
    @bjzhush 我这大概12亿数据... 我试了 所有source分在一起..但 查询的时候检索不完,不知道为啥 只能查到第一个 source ..
    letitbesqzr
        4
    letitbesqzr  
    OP
       2014-08-11 16:33:41 +08:00
    @bjzhush 通过api查询 有办法得到某条数据是属于哪个source的么?
    bjzhush
        5
    bjzhush  
       2014-08-11 16:39:26 +08:00
    @letitbesqzr 这个项目我是去年做的了,用的是PHP的Sphinx API
    具体数据里面有没有,我临时搜索了下
    根据 http://php.net/manual/en/sphinx.examples.php 貌似是没有来自哪个source的
    letitbesqzr
        6
    letitbesqzr  
    OP
       2014-08-11 16:41:24 +08:00
    @bjzhush 貌似...真就...没办法了
    bjzhush
        7
    bjzhush  
       2014-08-11 16:56:41 +08:00
    @letitbesqzr 我觉得你做搜索了,数据却没有做好搜索的准备
    加个全局UUID字段或许可以,不过非主键估计比较麻烦
    另外就是单独copy出来提供给sphinx做数据源,不过又出现了维护,数据更新同步的额外开销..
    letitbesqzr
        8
    letitbesqzr  
    OP
       2014-08-11 17:00:22 +08:00
    @bjzhush "密码查询网站" 之类的东西,你懂得... 每个表是一个网站的数据.. 不需要更新 维护 请问有什么方案来做?
    bjzhush
        9
    bjzhush  
       2014-08-11 17:02:26 +08:00
    @letitbesqzr 我去年做的就是这个...
    SheGongKu...
    当时放了3亿数据进去,速度非常快
    要不我打包卖你好了 ^_^ 包括查询整套代码,价格好说
    letitbesqzr
        10
    letitbesqzr  
    OP
       2014-08-11 17:09:40 +08:00
    @bjzhush 算了 - - 我12亿呢..加上soyun的没导入..估计有15e
    bjzhush
        11
    bjzhush  
       2014-08-11 17:15:29 +08:00
    你建400个表,分4组,每表1KW数据,也就是每组10亿数据,直接复制批量修改配置文件就OK了
    这玩意要的是匹配,所以分开索引分开查是没问题的,你真的不要? 拿到就能直接导数据用哦,很便宜哦,哈哈
    letitbesqzr
        12
    letitbesqzr  
    OP
       2014-08-11 17:16:38 +08:00
    @bjzhush 但我这... 怎么能做到每表1Kw数据...
    bjzhush
        13
    bjzhush  
       2014-08-11 17:21:12 +08:00
    @letitbesqzr 每表1KW数据,为什么不是100W,为什么不是1亿 ?
    因为这是Mysql的瓶颈临界值
    数据往里导入就是了,11位int能放多少数据你自己算
    你搞过这个没有?
    bjzhush
        14
    bjzhush  
       2014-08-11 17:21:37 +08:00
    @letitbesqzr 还是不在这扯了,和谐...
    letitbesqzr
        15
    letitbesqzr  
    OP
       2014-08-11 17:35:19 +08:00
    @bjzhush 实在不行,只有这样了,,,既然我每个表一个index...我就定义一个数组 - - 然后遍历数组挨个index去取数据吧...
    bjzhush
        16
    bjzhush  
       2014-08-12 08:42:14 +08:00
    @letitbesqzr 那样你检索还有整合结果会非常麻烦,而且整合后结果混乱无序.....
    唉,浪费这么多时间瞎折腾,就是一毛不拔
    letitbesqzr
        17
    letitbesqzr  
    OP
       2014-08-12 12:28:54 +08:00
    @bjzhush 怎么会.... 直接foreach 循环就可以了,每个表都是带有来源字段的... 已经完成了.. 不过内存占用有点大.. 19亿数据了 占用了 启动searchd 占用了 30g内存.. 但检索都在一秒内
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5367 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 09:14 · PVG 17:14 · LAX 01:14 · JFK 04:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.