小编Ale*_*rey的帖子

仅显示Git日志中一个分支的历史记录

我正在为我的项目使用Git并尝试遵循最佳实践:

  1. 我在一个主题分支上工作
  2. 准备好后,我将主题分支合并到我的dev分支中git merge --squash.这使我的开发分支保持清洁.
  3. 每当dev分支稳定并且团队决定它的发布时间时,我们将dev分支合并到master分支中,而不使用squash,并将提交的标记作为版本发布.

这应该保留我们的历史,并使用gitk,我们可以看到所有提交的位置.但是,我希望能够看到应用于分支的提交.我试过了:

git log master
git show-branch
Run Code Online (Sandbox Code Playgroud)

这些都不显示只是在历史的主分支.有没有办法轻松做到这一点?

git git-log branching-and-merging

25
推荐指数
2
解决办法
2万
查看次数

如何在PHP客户端和C守护程序服务器之间进行IPC?

并感谢您看一下这个问题.

背景
我有几台机器在很短的时间内连续产生多个(最多300)PHP脚本控制台.这些脚本快速运行(不到一秒钟)然后退出.所有这些脚本都需要只读访问大型trie结构,每次运行脚本时加载到内存中都非常昂贵.服务器运行Linux.

我的解决方案
创建一个C守护进程,将trie结构保存在内存中并接收来自PHP客户端的请求.它将收到来自每个PHP客户端的请求,对内存结构执行查找并回答答案,从而避免PHP脚本执行该工作.请求和响应都是短字符串(不超过20个字符)

我的问题
我是C守护进程和进程间通信的新手.经过大量研究,我已将选择范围缩小到Message Queues和Unix域套接字.消息队列似乎已经足够了,因为我认为(我可能错了)他们排队了守护进程的所有请求以连续回答它们.但是,Unix域套接字似乎更容易使用.但是,我有各种各样的问题,我无法找到答案:

  1. PHP脚本如何发送和接收消息或使用UNIX套接字与守护进程通信?相反,C守护进程如何跟踪它必须向哪个PHP进程发送回复?
  2. 我见过的守护进程的大多数例子都使用了一个带有睡眠条件的无限while循环.我的守护进程需要为任何时候可能出现的许多连接提供服务,并且响应延迟至关重要.如果PHP脚本在睡眠时发送请求,守护程序将如何反应?我已经阅读过有关民意调查和epoll的内容,这是等待收到邮件的正确方法吗?
  3. 每个PHP进程总是发送一个请求,然后等待接收响应.我需要确保如果守护程序关闭/不可用,PHP进程将等待设置的最大时间响应,如果没有收到回答将继续,而不是挂起.可以这样做吗?

数据结构的实际查找非常快,我不需要任何复杂的多线程或类似解决方案,因为我认为以FIFO方式处理请求就足够了.我还需要保持简单的愚蠢,因为这是一项关键任务服务,而且我对这类程序还是比较陌生的.(我知道,但我真的无法解决这个问题,学习经验会很棒)

我真的很感激代码片段,它为我所具有的具体问题提供了一些亮点.指南和指针的链接也将受到欢迎,这些指南将进一步了解这个低级别IPC的阴暗世界.

谢谢你的帮助!


更新

现在比我在提出这个问题时所了解的要多得多,我只是想向任何感兴趣的人指出,Thrift框架和ZeroMQ在抽象硬件,套接字级编程方面做得非常出色.Thrift甚至可以免费为您提供服务器的脚手架!

事实上,不要去构建网络服务器的所有艰苦工作,而是考虑使用已经为您解决问题的良好异步服务器编写应用程序服务器代码.当然,使用异步IO的服务器非常适合不需要密集CPU处理的网络应用程序(或者事件循环块).

python的例子:Twisted,gevent.我更喜欢gevent,而且我不包括龙卷风,因为它专注于HTTP服务器端.

Ruby的例子:EventMachine

当然,Node.js基本上是当今异步服务器的默认选择.

如果您想深入了解,请阅读C10k问题Unix网络编程.

php c daemon ipc

23
推荐指数
1
解决办法
1万
查看次数

使用星号PHP脚本匹配电话前缀的最快方法

并提前感谢您的帮助.

背景 - 我正在编写一个PHP脚本,需要找出调用者试图达到的目的地.电话号码前缀是标识目的地的字符串.对于每个调用,程序必须找到与字符串匹配的最长前缀.例如,数字30561234567将匹配305但不匹配3057或304.如果存在3056,则它将是首选匹配.

在研究了几个数据结构之后,每个节点存储一个数字并包含指向其他10个可能选择的指针的树似乎是理想的.这可以实现为一个数组数组,其中脚本可以检查3,在那里找到一个数组,然后在该新数组上检查0,找到另一个数组,依此类推,直到找到一个值而不是数组.该值将是目标ID(脚本的输出).

要求 - 性能绝对至关重要.检查这些前缀所花费的时间会延迟调用,并且每个服务器都必须处理大量调用,因此数据结构必须存储在内存中.目前大约有6000个前缀.

问题 - 每次服务器收到呼叫时都会运行脚本,因此数据必须保存在某种缓存服务器中.在检查了memcached和APC(高级PHP缓存)后,我决定使用APC,因为它[更快] [3](它是一个本地内存存储)

我遇到的问题是数组数组最多可以变成10个数组,并且将是一个非常复杂的数据结构,如果我作为对象添加到缓存中,将需要很长时间来反序列化.

但是,如果我将每个单独的数组分别添加到缓存中(使用一些逻辑命名结构可以很容易地找到它,就像数组3中的3一样,那么30代表数组30,305代表该补丁后面的数组等...)I将不得不从缓存中多次获取不同的数组(每次调用最多10个),这让我经常点击缓存.

我是以正确的方式来做这件事的吗?也许有另一种解决方案?或者我提议的方法之一优于另一方法?

谢谢你输入,

亚历克斯

php performance caching asterisk

6
推荐指数
1
解决办法
2004
查看次数

没有使用MySQL复合索引

我有一个大表,我必须从中选择大量的行.

该表存储呼叫详细记录(CDR).例:

+-------------+--------------+------+-----+---------------------+----------------+
| Field       | Type         | Null | Key | Default             | Extra          |
+-------------+--------------+------+-----+---------------------+----------------+
| id          | int(45)      | NO   | PRI | NULL                | auto_increment |
| calldate    | datetime     | NO   | MUL | 0000-00-00 00:00:00 |                |
| accountcode | varchar(100) | NO   |     |                     |                |
| other...    | varchar(45)  | NO   |     |                     |                |
Run Code Online (Sandbox Code Playgroud)

由于我的查询在某些日期查找客户调用,因此我将calldate和accountcode一起编入聚簇索引中,如下所示:

CREATE TABLE `cdr` (
  `id` int(45) NOT NULL AUTO_INCREMENT,
  `calldate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', …
Run Code Online (Sandbox Code Playgroud)

mysql clustered-index

6
推荐指数
1
解决办法
748
查看次数