小编mar*_*cus的帖子

(穷人的)产品推荐实施

我正在尝试为在线商店建立一个穷人的推荐系统.我想要认识到那种亚马逊"买了这个项目的顾客也买了"的功能,我读了很多关于它的内容.我知道有Apache Mahout的事情,但我无法以这种方式调整服务器.然后会有谷歌预测API,但它需要花钱,所以我开始尝试自己.

我得到了250.000+项目的订单历史,我写了一个嵌套的MySQL查询来查找包含当前文章的订单,对其他订单项进行排名并对该表进行排序以进行排名,因此我得到了一组其他人一起订购的产品目前的文章.

问题是,查询可能需要10秒 - 所以这不能直接使用.我想到了一个缓存表,但这个查询在20分钟后停止(有60.000个产品和250.000个订购商品)所以我无法填写该表.

我目前的解决方法如下:推荐HTML通过AJAX ondocumentready加载,因此网站加载,而推荐在后台加载.推荐数据处理一次并存储在filecache(PEAR简单缓存)中,以便下次加载更快.因此,如果有人访问该网站并存储一天或一周,则按需制作缓存.

我问自己和你,这是一种可接受的方法,还是愚蠢无知?将缓存的数据存储在db或文件中是否更好(我考虑性能和并行命中).我的意思是,在最坏的情况下,我最终会有60.000个缓存文件.

我更喜欢带有所有数据的预先计算的表,但正如我所说,它需要很长时间,我不知道如何优化它.(等到SQL Dude从假期回来^^)

感谢任何提示,意见.

顺便说一句.这是查询:

SELECT c.ArtNr as artnr , count(c.ArtNr) as rank, s.ArtNr as parent_artnr
FROM (
SELECT a.ID_order, a.ArtNr
        FROM net_orderposition a
        WHERE a.ArtNr = 'TT-PV0005'
) s
JOIN net_orderposition c 
WHERE s.ID_order = c.ID_order AND s.ArtNr != c.ArtNr
GROUP BY c.ArtNr
ORDER BY rank DESC,c.Stamp DESC
LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

编辑:

我想到了给定的答案,我认为它们与我最初的想法相似.上面的代码结果如下表所示:

ID,ParentID , ChildID  , Rank
1, TT-PV0005, TT-PV0040, 220
2, TT-PV0005, TT-PV0355, 135
3, TT-PV0005, TT-PV0450, 134
4, TT-PV0005, …
Run Code Online (Sandbox Code Playgroud)

php mysql ajax recommendation-engine

5
推荐指数
1
解决办法
1977
查看次数

Firebase Auth JS / PHP

我受命为基于Firebase的Android应用程序构建Web界面。我有一些与数据库交互的端点(云函数)。要访问这些端点,我需要使用电子邮件和密码[1]对用户进行身份验证,检索accessToken [2]并授权使用Authorization: Bearer {accessToken}标头对端点的每个请求进行授权。

我使用php并竭尽全力想如何在我的应用程序中管理经过身份验证的用户。

TL; DR请仅在php中查看我的最终解决方案。/sf/answers/3648372031/

我通过ajax在php会话中传输accessToken,以将cURL请求签名到端点。显然,除了使用firebase JS auth之外,别无其他方法(据我所知[4])。

我的问题是:将其保存accessToken在php会话中并通过ajax POST请求将其与每个页面加载进行比较是否足够(请参见下面的代码)?什么是在php中处理该问题的更可靠策略?

编辑: 一位用户指出,使用带有JWT令牌的经典php会话没有多大意义,我阅读了有关该主题的文章。那么关于Firebase-这是要考虑的事情吗? https://firebase.google.com/docs/auth/admin/manage-cookies

Firebase Auth为依赖会话cookie的传统网站提供服务器端会话cookie管理。与客户端短暂的ID令牌相比,此解决方案具有多个优点,客户端短暂的ID令牌可能每次需要使用重定向机制来在到期时更新会话cookie:

这是我得到的:

1.登录页面

如Firebase示例中所述[3]

function initApp() {

  firebase.auth().onAuthStateChanged(function (user) {
    if (user) {
      // User is signed in.

      // obtain token, getIdToken(false) = no forced refresh
      firebase.auth().currentUser.getIdToken(false).then(function (idToken) {

        // Send token to your backend via HTTPS
        $.ajax({
          type: 'POST',
          url: '/auth/check',
          data: {'token': idToken},
          complete: function(data){
            // data = {'target' => '/redirect/to/route'}
            if(getProperty(data, 'responseJSON.target', false)){
              window.location.replace(getProperty(data, …
Run Code Online (Sandbox Code Playgroud)

php ajax firebase firebase-authentication

4
推荐指数
1
解决办法
1843
查看次数