我正在开发一个网上商店类型的应用程序.我经常在其他网站上看到的一个功能是过滤选项的细分,之后总共过滤选项会有多少结果.您经常在计算机网站(例如Newegg)或二手车网站上看到此信息.例:
CPU:
* AMD (315)
* Intel (455)
Video card:
* ATI (378)
* Nvidia (402)
Run Code Online (Sandbox Code Playgroud)
我怎样才能有效地计算这些总数?我正在研究的网站将有许多不同的产品(10.000+),有许多不同的选择.更糟糕的是,产品在不断变化.
试图预先计算所有不同的过滤组合总数似乎是不可行的.如果我有5个不同的过滤器,每个过滤器有4个选项,那么选项的可能性就是多少20 * 16 * 12 * 8 * 4 = 122880.计算它需要很长时间.
另一种选择是按需查询并缓存结果(例如在Redis中).但是,如果不断添加和删除产品,我怎么能有效地管理缓存呢?缓存通常是陈旧的.我担心我必须以微观方式管理缓存失效,从而导致一个非常复杂和脆弱的实现.另一种方法是使广泛的缓存部分无效.但是,在无效之后,我的数据库会被需要重新计算这些总数的活跃用户的查询匆匆忙忙.
有一个漂亮而优雅的方式来处理这个问题吗?
我的PHP Web应用程序有一个API,可以接收base64编码的合理大文件(最大32 MB).目标是在我的文件系统上的某处写入这些文件.当然是解码的.这样做资源最少的方法是什么?
编辑:通过API接收文件意味着我的PHP应用程序中有32MB字符串,而不是磁盘上某处的32 MB源文件.我需要将该字符串解码为文件系统.
使用PHP自己的base64_decode()并没有削减它,因为它使用了大量的内存,所以我一直在运行PHP的内存限制(我知道,我可以提高这个限制,但我不觉得允许PHP使用256MB左右每个过程).
还有其他选择吗?我可以手动完成吗?或者将文件写入磁盘编码并调用一些外部命令?任何想法?
在Symfony2中处理字符串表示和数字代码翻译的最佳方法是什么?
假设我有这样一个实体:
<?php
class Message
{
const STATUS_NEW = 0;
const STATUS_SENT = 1;
const STATUS_DELIVERED = 2;
/**
* @var int
*/
private $status = self::STATUS_NEW;
public function getStatus()
{
return $this->status;
}
}
Run Code Online (Sandbox Code Playgroud)
在前端和SonataAdmin后端,我不想显示数字代码而是字符串.例如'新','已发送'和'已发送'.但我也希望能够翻译这些字符串(例如荷兰语'Nieuw','Verzonden'和'Afgeleverd').
因此,有两个转换步骤:首先从数字代码到字符串或翻译键,然后再到本地化字符串.
我最好在哪里以及如何进行这些转换?在我自己的控制器/视图的前端和基于SonataAdmin的支持?
处理内部开发数据库的凭据的最佳实践是什么?对于应用程序还是开发人员?
当前,我们为每个开发数据库创建一个单独的用户/密码,并在代码存储库中提交这些凭据。但是,我们希望摆脱将凭证存储在存储库中的趋势。问题在于我们的开发人员和应用程序都需要访问数据库。
如果重要的话,我们使用MySQL(准确地说是Percona)。
我的任务是从一些奇怪的旧系统中读取一些数据.
系统包含许多日期,但它们都是奇怪的格式.它们是从大约55,000到大约的整数80,000.
我知道两个确定日期:
58,112 equals February 5, 1960 (originally written as Feb 2,1960 [*])
61,439 equals March 16, 1969
[*] This typo explains some of the comments initially challenging the
leap-year awareness of the calendar.
Run Code Online (Sandbox Code Playgroud)
在我看来,这些整数是自1800年12月28日以来经过的天数.但我认为这是开始日历的一个非常奇怪的日期.闰年可能正在发生什么事情,什么 - 不会在以后引起问题.
有人认出这个日历吗?任何人都可以告诉我将这些整数转换为人类可读日期的正确方法是什么?
跟踪代码库部署的好方法是什么?我希望能够看到何时在特定服务器上部署了一个版本,谁发布了它,它解决了哪些问题,等等.
目前,我们有一个部署工具,可以在我们的问题跟踪器中生成包含所有这些信息的问题.这样可以轻松地将发布问题与相关问题相关联,但它也会污染我们的问题数据库.
我们还希望从内部开始持续集成,这意味着会有更多的发布问题.
是否有更好的跟踪版本的方法?
我们的技术堆栈是PHP(Symfony2),使用Phing作为构建系统,定制的基于Web的部署工具,用于错误跟踪的Mantis和用于存储库托管的Bitbucket.
我想使用Capistrano 3部署我的PHP应用程序.我的应用程序使用Symfony 2作为框架,使用Phing作为构建系统.我已经安装了capistrano-symfony,所以我可以使用Capistrano内部的Symfony命令.
问题是它还修改了部署流程.具体来说,它在这里添加两个任务:
https://github.com/capistrano/symfony/blob/master/lib/capistrano/tasks/symfony.rake
after "deploy:updated", "deploy:clear_controllers"
after "deploy:updated", "deploy:assets:install"
Run Code Online (Sandbox Code Playgroud)
有没有办法再次从流程中删除这些钩子?这些操作已经由我的Phing构建脚本(由Capistrano调用)执行.没有必要再次运行它们.
我正在使用Sonata Admin.是否可以在同一列表视图中显示仅针对某些行而不是其他行显示的操作?
例如,假设我有一个具有"活动"字段的用户实体.我想仅针对非活动用户显示"删除"操作,而不是针对活动用户.我怎样才能做到这一点?
我有一个包含两个边缘定义的图形,如下所示:
isDepartment: [organisation] -> [organisation]
hasAccess: [user] -> [organisation]
Run Code Online (Sandbox Code Playgroud)
组织嵌套在树中(无循环).有多个顶级组织没有任何传入isDepartment边缘.
用户被授予访问一个或多个组织的权限.这些可以是位于树下的某个顶层组织或组织.如果用户有权访问组织,则可以访问所有子组织.
我正在尝试构建一个自定义访问者或过滤器,为用户提供所有可访问的组织,包括它的根路径,以及属性(如果它们可访问或不可访问).
例如,采用以下组织结构:
现在请带有访问权限的用户Root A和Dept. B.2.我想生成以下结果树:
请注意Root C并且Dept. B1不在结果中,因为用户无法访问它们,也无法访问任何子级.
另请注意,Root B包含但标记为not accessible.这是因为只允许用户访问Root B根本身但不是根本身的子.
如何编写完成此功能的自定义函数/访客/过滤器?
是否有可能在Linux中拥有动态环境变量?
我有一个网站服务器,网站遵循这种布局:
site/
qa/
production/
Run Code Online (Sandbox Code Playgroud)
我想有一个环境变量(例如APPLICATION_ENV),当我在qa目录时设置为"qa",当我在生产目录时设置为"production".原因是各个站点可以使用许多不同的进程,如果它们是QA或生产环境,则需要知道这些进程.有些站点在Apache下使用PHP,有些站点使用Node.js,有些站点使用命令行工具,cron作业等等.我想有一个关于它是QA还是生产环境的授权来源.
我有桌子tbl_dtcount。在该表中有一列用于日期。
现在我需要为该日期字段中的每一行减少一天。日期从2012-05-19到开始2012-07-03。执行此操作的 MySQL 更新语句是什么?
php ×3
symfony ×3
deployment ×2
mysql ×2
sonata-admin ×2
arangodb ×1
base64 ×1
bash ×1
bug-tracking ×1
caching ×1
calendar ×1
capistrano ×1
capistrano3 ×1
credentials ×1
database ×1
date ×1
datetime ×1
environment ×1
filter ×1
graph ×1
leap-year ×1
linux ×1
memory ×1
release ×1
sql-update ×1
translation ×1