在搜索文本中匹配的单词时,我可以优化核心数据查询吗?(这个问题也适用于iPhone上自定义SQL与核心数据的智慧.)
我正在研究一种新的(iPhone)应用程序,它是一个科学数据库的手持式参考工具.主界面是一个标准的可搜索表视图,我想要用户键入新单词时的类型响应.单词匹配必须是文本中单词的前缀.该文本由100,000个单词组成.
在我的原型中,我直接编写了SQL.我创建了一个单独的"单词"表,其中包含主实体文本字段中的每个单词.我索引了单词并按照行进行了搜索
SELECT id, * FROM textTable
JOIN (SELECT DISTINCT textTableId FROM words
WHERE word BETWEEN 'foo' AND 'fooz' )
ON id=textTableId
LIMIT 50
Run Code Online (Sandbox Code Playgroud)
这运行得非常快.使用IN可能也会起作用,即
SELECT * FROM textTable
WHERE id IN (SELECT textTableId FROM words
WHERE word BETWEEN 'foo' AND 'fooz' )
LIMIT 50
Run Code Online (Sandbox Code Playgroud)
LIMIT至关重要,可以让我快速显示结果.如果达到限制,我会通知用户显示的内容太多.这是kludgy.
我花了最近几天考虑转移到Core Data的优势,但我担心架构中缺乏控制,索引和查询重要查询.
从理论上讲,NSPredicate textField MATCHES '.*\bfoo.*'会起作用,但我相信它会很慢.这种文本搜索似乎很常见,我想知道通常的攻击是什么?你会像我上面那样创建一个单词实体并使用"bEGINSWITH'foo'这个词的谓词吗?这会像我的原型一样快吗?Core Data会自动创建正确的索引吗?我找不到任何明确的方法来建议持久性存储有关索引.
我在iPhone应用程序中看到了Core Data的一些优点.故障和其他内存注意事项允许对tableview查询进行有效的数据库检索,而无需设置任意限制.对象图管理允许我轻松遍历实体而无需编写大量SQL.移植功能将来会很好.另一方面,在有限的资源环境(iPhone)中,我担心自动生成的数据库会因元数据,不必要的反向关系,低效的属性数据类型等而膨胀.
我应该潜入或谨慎行事吗?
我已经写了一些Core Data iPhone应用程序,我遇到了一个一直存在的问题,我希望这是iPhone开发的常见模式.也就是说,我有一个或多个命令行数据加载器来创建Core Data数据库,然后我有我的iPhone应用程序.由于模型文件是共享的,并且加载器是项目的一个组成部分,我希望它是一个单独的项目.
使用iPhone OS目标和命令行目标创建项目的正确方法是什么?我所有的尝试都没有奏效 - 我有代码签名,调试和配置问题.
到目前为止,这是我最好的尝试:
此时我没有可执行文件.(相反,如果您创建一个新的Command Line Utility项目,则可执行文件会自动与您的目标关联.)
如果我创建一个自定义可执行文件,那么我有一些麻烦:(1)更改目标不会更改可执行文件,因为您无法将自定义可执行文件链接到目标,(2)调试命令行程序是有问题的,因为断点在XCode中设置没有注册(调试可执行文件时,行号上的V形变为橙色),所以我必须闯入正在运行的代码,然后从控制台手动处理调试,(3)最令人沮丧的是,如果我创建我的iPhone应用程序的正确配置分发版本,然后将iPhone应用程序转移到设备失败抱怨配置配置文件与代码签名权利不匹配.绝对不是这种情况,因为我只为iPhone目标的分发版本设置了配置文件和授权文件,但无论多么烦恼,我都无法在设备上安装目标.(如果我使用命令行工具创建一个具有相同代码和代码签名的新项目,那么我可以安装AdHoc配置的应用程序.)
那么......我应该遵循一些其他模式吗?Xcode配置是严重的伏都教.
可能重复:
如何编写用于计算数据框内表达式的R函数
我想编写一个对data.frame进行排序的函数 - 而不是使用繁琐的order().给出类似的东西
> x=data.frame(a=c(5,6,7),b=c(3,5,1))
> x
a b
1 5 3
2 6 5
3 7 1
Run Code Online (Sandbox Code Playgroud)
我想说的是:
sort.df(x,b)
Run Code Online (Sandbox Code Playgroud)
所以这是我的功能:
sort.df <- function(df, ...) {
with(df, df[order(...),])
}
Run Code Online (Sandbox Code Playgroud)
我为此感到自豪.鉴于R的惰性评估,我认为......参数只会在需要时进行评估 - 到那时它将在范围内,因为'with'.
如果我直接运行'with'行,它就可以了.但功能没有.
> with(x,x[order(b),])
a b
3 7 1
1 5 3
2 6 5
> sort.df(x,b)
Error in order(...) : object 'b' not found
Run Code Online (Sandbox Code Playgroud)
怎么了?怎么解决?例如,我经常在像plyr这样的软件包中看到这种"魔力".有什么诀窍?
如何使用 Shiny 应用程序实时监控文件系统(或其他外部事件)的更改?例如,假设我有一个仪表板应用程序,它提供服务器上文件的统计信息。我想在这些文件发生变化或添加新文件时实时更新我的统计数据。
我的想法是在客户端使用Javascript定期轮询服务器。例如,每隔 10 秒,我可能会调用Shiny.setInputValue("check.fs", 1, {priority: "event"});,然后在我拥有的服务器上调用observeEvent(input$check.fs, { ... }),这将更新反应。
还有其他想法吗?有没有办法只在服务器上执行此操作而不使用 JavaScript?
Shiny 提供了一个selectizeInputwrapper selectize.js,它生成一个文本输入/组合框小部件。我想延迟加载 selectizeInput 的选项/值有几个原因:可能有一长串值,或者可能的值取决于其他参数。另外,我希望用户能够创建新值(例如选择现有值或创建您自己的值)。
But in all of these cases, the value of the selectizeInput cannot be bookmarked using Shiny's server-side bookmarking. When the selectizeInput object is initialized, the bookmarked value stored in the input are not yet valid option values.
Does anybody have any clever workarounds to bookmark selectizeInput values?
Here's the simplest example dealing with just the create option:
library(shiny)
ui <- function(request) {
fluidPage(
selectizeInput("foo", "Created Values Cannot Be Bookmarked", choices=c("Choose From List …Run Code Online (Sandbox Code Playgroud) 我想为闪亮的应用程序提供基本身份验证,理想情况下,我不想处理登录协议或密码管理。我希望我的应用提供公开的数据视图,但是如果用户进行了身份验证,则可以使用个性化数据集。在最好的情况下,我想使用联合登录(例如Google)。
一种解决方案是使用代理(auth0,shinyProxy)。这是一个重量级的解决方案,需要运行其他服务。另外,没有简单的方法可以将用户登录信息与闪亮的服务器进行通信,这是我的主要目标。并且代理不允许该应用在我要求的非身份验证模式下运行。
另一种解决方案是使用javascript手工制作相对简单的用户名/密码界面。这是一个例子。但是我宁愿不手动管理用户名/密码验证。在我的应用程序中,我希望任何人都可以使用该应用程序,但是我只需要为每个用户提供唯一的ID,即可获得个性化的体验。
因此,如果我想使用Google的身份验证,那么第三种方法是使用GoogleAuthR。但是我发现该库存在问题,因为我无法使其支持持久登录。像其他使用联合登录的应用程序一样,我希望用户稍后返回该URL并仍然保持连接状态。
有没有办法观察派生属性的变化?例如,我想知道何时添加CALayer作为子图层,以便我可以相对于其(新)父级调整其几何.
所以,我有一个子类CALayer,比如CustomLayer,我想我可以在init中为该属性注册一个观察者:
[self addObserver:self forKeyPath:@"superlayer" options:0 context:nil]
Run Code Online (Sandbox Code Playgroud)
并实施observeValueForKeyPath:ofObject:change:context.什么都没发生,因为,大概是,superlayer是派生属性(attr字典存储父母的不透明ID).同样,我不能继承子类,setSuperlayer:因为它永远不会被调用.实际上,据我所知,当父进程时,子层上没有设置实例方法或公共属性[self addSublayer:aCustomLayer].
然后我想,好吧,我会像这样继承addSublayer:
- (void)addSublayer:(CALayer *)aLayer {
[aLayer willChangeValueForKey:@"superlayer"];
[super addSublayer:aLayer];
[aLayer didChangeValueForKey:@"superlayer"];
}
Run Code Online (Sandbox Code Playgroud)
但仍然没有!(也许这是一个线索,当我创建一个简单的独立测试类并使用它will[did]ChangeValueForKey:然后它工作.)这可能是一个更普遍的Cocoa KVO问题.我该怎么办?提前致谢!
r ×3
shiny ×3
cocoa ×2
iphone ×2
cocoa-touch ×1
core-data ×1
ellipsis ×1
google-api ×1
google-oauth ×1
macos ×1
objective-c ×1
selectize.js ×1
sql ×1
xcode ×1