{"id":7979,"date":"2016-08-08T10:42:34","date_gmt":"2016-08-07T16:42:34","guid":{"rendered":"http:\/\/www.moonmile.net\/blog\/?p=7979"},"modified":"2016-08-08T10:46:09","modified_gmt":"2016-08-08T01:46:09","slug":"sqlite-%e3%81%a7-linq-%e3%82%92%e4%bd%bf%e3%81%86","status":"publish","type":"post","link":"http:\/\/www.moonmile.net\/blog\/archives\/7979","title":{"rendered":"SQLite \u3067 LINQ \u3092\u4f7f\u3046"},"content":{"rendered":"<p>\u3068\u6216\u308b\u3068\u3053\u308d\u3067\u3001\u3055\u3089\u3063\u3068\u7b54\u3048\u3066\u3057\u307e\u3063\u305f\u3089\u9593\u9055\u3063\u3066\u3044\u305f\u306e\u3067\u3001\u4ed5\u5207\u308a\u76f4\u3057\u304c\u3066\u3089\u306b\u9032\u5448\u81f4\u3057\u307e\u3059\u3002\u3069\u3046\u3084\u3089\u3001\u6614\u3001\u3069\u3053\u304b\u3067\u30aa\u30f3\u30e1\u30e2\u30ea\u306e\u8a2d\u5b9a\u3067\u4f7f\u3063\u3066\u3044\u3066\u305d\u306e\u77e5\u8b58\u304c\u305d\u306e\u307e\u307e\u3060\u3063\u305f\u3088\u3046\u3067\u3059\u3002\u30d5\u30a1\u30a4\u30eb\u30d9\u30fc\u30b9\u3067\u52d5\u3044\u3066\u3044\u307e\u3059\u306d\u3001SQLite\u306f\u3002\u5f8c\u8ff0\u3057\u307e\u3059\u304c\u3001\u63a5\u7d9a\u6587\u5b57\u5217\u306e\u3068\u3053\u308d\u3067\u300cDataSource=sample.db\u300d\u306e\u3088\u3046\u306b\u30d5\u30a1\u30a4\u30eb\u540d\u3067\u306f\u306a\u304f\u3066\u300cDataSource=:memory:\u300d\u306b\u3059\u308b\u3068\u30aa\u30f3\u30e1\u30e2\u30ea\u306eDB\u3068\u3057\u3066\u52d5\u4f5c\u3057\u307e\u3059\u3002<\/p>\n<h2>System.Data.SQLite \u3092\u4f7f\u3046<\/h2>\n<p>SQLite\u306e\u672c\u5bb6\u30b5\u30a4\u30c8\u304b\u3089\u843d\u3068\u3057\u3066\u3082\u3044\u3044\u306e\u3067\u3059\u304c\u3001\u624b\u3063\u53d6\u308a\u65e9\u304f NuGet \u3067\u843d\u3068\u3057\u307e\u3059\u3002<\/p>\n<p><a href=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2016\/08\/dworkblogimage20160808_01org.jpg\"><img decoding=\"async\" src=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2016\/08\/dworkblogimage20160808_01thum.jpg\" border=\"0\" \/><\/a><\/p>\n<p>.NET Core \u7528\u306b\u306f System.Data.SQLite.Core \u304c\u3042\u308b\u306e\u3068\u3001Windows IoT Core \u306e\u3088\u3046\u306a UWP \u30a2\u30d7\u30ea\u3067\u5185\u90e8\u3067\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u6271\u3046\u306e\u306b SQLite \u4e00\u629e\u3068\u306a\u308b\u306e\u3067\u3001\u4e00\u5ea6\u4f7f\u3063\u3066\u307f\u308b\u3068\u3044\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002NuGet \u306b\u306f\u300cMicrosoft.Data.SQLite\u300d\u3082\u3042\u308b\u306e\u3067\u3001\u591a\u5c11\u4e71\u7acb\u304e\u307f\u306a\u306e\u304b\u3082\u3002<\/p>\n<h2>SQLite\u306b\u30c6\u30fc\u30d6\u30eb\u3092\u4f5c\u308b<\/h2>\n<p>\u5b9f\u9a13\u7528\u306b users \u30c6\u30fc\u30d6\u30eb\u3092\u4f5c\u308a\u307e\u3059\u3002SQL\u6587\u306f\u3001\u4e00\u5ea6 PupSQLite \u3067\u4f5c\u3063\u305f\u3082\u306e\u304b\u3089\u5410\u304d\u51fa\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>Pup&#8217;s Atelier-Software<br \/>\n<a href=\"https:\/\/www.eonet.ne.jp\/~pup\/software.html\">https:\/\/www.eonet.ne.jp\/~pup\/software.html<\/a><\/p>\n<p><a href=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2016\/08\/dworkblogimage20160808_02org.jpg\"><img decoding=\"async\" src=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2016\/08\/dworkblogimage20160808_02thum.jpg\" border=\"0\" \/><\/a><\/p>\n<p>\u30aa\u30f3\u30e1\u30e2\u30ea\u306b\u3059\u308b\u5834\u5408\u306f\u3001\u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u3092\u30af\u30ed\u30fc\u30ba\u3059\u308b\u305f\u3073\u306b\u7121\u304f\u306a\u3063\u3066\u3057\u307e\u3046\uff08\u63ee\u767a\u6027\uff09\u306a\u306e\u3067\u3001\u30a2\u30d7\u30ea\u304c\u8d77\u52d5\u3057\u305f\u3068\u304d\u306b\u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u3092\u958b\u3044\u3066\u3001\u7d42\u308f\u308b\u3068\u304d\u306b\u9589\u3058\u308b\u3068\u3044\u3046\u5177\u5408\u3067\u3057\u3087\u3046\u3002<\/p>\n<p>[code lang=&#8221;csharp&#8221;]<br \/>\n{<br \/>\n    string sql = @&quot;<br \/>\nCREATE TABLE [users] (<br \/>\n[id] VARCHAR(256),<br \/>\n[username] VARCHAR(256) NOT NULL,<br \/>\n[email] VARCHAR(256),<br \/>\n[birthday] DATETIME,<br \/>\n[age] INTEGER,<br \/>\n[memo1] VARCHAR(256),<br \/>\n[memo2] VARCHAR(256),<br \/>\n[memo3] VARCHAR(256),<br \/>\n[memo4] VARCHAR(256),<br \/>\n[memo5] VARCHAR(256),<br \/>\n[memo6] VARCHAR(256),<br \/>\n[memo7] VARCHAR(256),<br \/>\n[memo8] VARCHAR(256),<br \/>\n[memo9] VARCHAR(256),<br \/>\n[memo10] VARCHAR(256),<br \/>\nPRIMARY KEY(id)<br \/>\n);&quot;;<br \/>\n    var cn = new SQLiteConnection(&quot;DataSource=&quot; + db_file);<br \/>\n    var cmd = new SQLiteCommand(sql, cn);<br \/>\n    cn.Open();<br \/>\n    cmd.ExecuteNonQuery();<br \/>\n    cn.Close();<br \/>\n    textMsg.Text = &quot;Users \u30c6\u30fc\u30d6\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3057\u305f&quot;;<br \/>\n}<br \/>\n[\/code]<\/p>\n<p>Memo1 \u304b\u3089 Memo10 \u306e\u30c7\u30fc\u30bf\u306f\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u5de8\u5927\u306b\u3059\u308b\u305f\u3081\u306e\u30c0\u30df\u30fc\u30c7\u30fc\u30bf\u7528\u3067\u3059\u3002\u3053\u306e\u30c6\u30fc\u30d6\u30eb\u3067\u4f5c\u308b\u306810\u4e07\u4ef6\u3067\u3001500MB \u3050\u3089\u3044\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u3067\u304d\u3042\u304c\u308a\u307e\u3059\u3002<\/p>\n<h2>User\u30af\u30e9\u30b9\u3092\u4f5c\u308b<\/h2>\n<p>LINQ \u3067\u4f7f\u3048\u308b\u3088\u3046\u306b Entity \u30af\u30e9\u30b9\u3092\u4f5c\u308a\u307e\u3059\u3002<br \/>\n\u30ab\u30e9\u30e0\u306e\u578b\u306f\u6307\u5b9a\u3057\u306a\u304f\u3066\u3082\u3001\u3046\u307e\u304f\u30de\u30c3\u30d4\u30f3\u30b0\u3067\u304d\u3066\u3044\u307e\u3059\u3002Table\u5c5e\u6027\u3068Column\u5c5e\u6027\u306eName\u3092\u6307\u5b9a\u3059\u308c\u3070ok\u3067\u3059\u3002<\/p>\n<p>[code lang=&#8221;csharp&#8221;]<br \/>\nusing System.Data.Linq.Mapping;<\/p>\n<p>[Table(Name =&quot;users&quot;)]<br \/>\nclass User<br \/>\n{<br \/>\n    [Column(Name =&quot;id&quot;, IsPrimaryKey = true )]<br \/>\n    public string Id { get; set; }<br \/>\n    [Column(Name = &quot;username&quot;, CanBeNull = false)]<br \/>\n    public string UserName { get; set; }<br \/>\n    [Column(Name = &quot;email&quot;,CanBeNull = true)]<br \/>\n    public string Email { get; set; }<br \/>\n    [Column(Name = &quot;birthday&quot;, CanBeNull = true)]<br \/>\n    public DateTime? Birthday { get; set; }<br \/>\n    [Column(Name = &quot;age&quot; ,CanBeNull = true)]<br \/>\n    public int? Age { get; set; }<\/p>\n<p>    [Column(Name = &quot;memo1&quot;)]<br \/>\n    public string Memo1 { get; set; }<br \/>\n    [Column(Name = &quot;memo2&quot;)]<br \/>\n    public string Memo2 { get; set; }<br \/>\n    [Column(Name = &quot;memo3&quot;)]<br \/>\n    public string Memo3 { get; set; }<br \/>\n    [Column(Name = &quot;memo4&quot;)]<br \/>\n    public string Memo4 { get; set; }<br \/>\n    [Column(Name = &quot;memo5&quot;)]<br \/>\n    public string Memo5 { get; set; }<br \/>\n    [Column(Name = &quot;memo6&quot;)]<br \/>\n    public string Memo6 { get; set; }<br \/>\n    [Column(Name = &quot;memo7&quot;)]<br \/>\n    public string Memo7 { get; set; }<br \/>\n    [Column(Name = &quot;memo8&quot;)]<br \/>\n    public string Memo8 { get; set; }<br \/>\n    [Column(Name = &quot;memo9&quot;)]<br \/>\n    public string Memo9 { get; set; }<br \/>\n    [Column(Name = &quot;memo10&quot;)]<br \/>\n    public string Memo10 { get; set; }<br \/>\n}<br \/>\n[\/code]<\/p>\n<h2>\u691c\u7d22\u7528\u306e LINQ<\/h2>\n<p>System.Data.Linq\u3092\u53c2\u7167\u8a2d\u5b9a\u3057\u3066\u304a\u3044\u3066\u3001DataContext\u30af\u30e9\u30b9\u3092\u4f7f\u3044\u307e\u3059\u3002\u30c6\u30fc\u30d6\u30eb\u3092\u53c2\u7167\u3059\u308b\u3068\u304d\u306f\u3001GetTable\u30e1\u30bd\u30c3\u30c9\u3067\u6307\u5b9a\u306e\u30c6\u30fc\u30d6\u30eb\u3092\u53d6\u5f97\u3002<\/p>\n<p>[code lang=&#8221;csharp&#8221;]<br \/>\nprivate void clickCount(object sender, RoutedEventArgs e)<br \/>\n{<br \/>\n    var sw = new Stopwatch();<br \/>\n    sw.Start();<br \/>\n    var cn = new SQLiteConnection(&quot;DataSource=&quot; + db_file);<br \/>\n    var context = new DataContext(cn);<br \/>\n    var users = context.GetTable&amp;lt;User&amp;gt;();<br \/>\n    int count = users.Count();<\/p>\n<p>    textMsg.Text = $&quot;{count} \u4ef6\u306e\u30c7\u30fc\u30bf\u304c\u3042\u308a\u307e\u3059&quot;;<br \/>\n    textTime.Text = $&quot;{sw.ElapsedMilliseconds} msec&quot;;<br \/>\n}<br \/>\n[\/code]<\/p>\n<p>\u3059\u308b\u3068\u3001LINQ \u304c\u4f7f\u3048\u308b\u3088\u3046\u306b\u306a\u308b\u306e\u3067\u3001where\u6587\u306a\u3069\u3092\u4f7f\u3063\u3066\u6761\u4ef6\u3092\u6307\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>[code lang=&#8221;csharp&#8221;]<br \/>\nprivate void clickAge(object sender, RoutedEventArgs e)<br \/>\n{<br \/>\n    var sw = new Stopwatch();<br \/>\n    sw.Start();<br \/>\n    var cn = new SQLiteConnection(&quot;DataSource=&quot; + db_file);<br \/>\n    var context = new DataContext(cn);<br \/>\n    var users = context.GetTable&amp;lt;User&amp;gt;();<br \/>\n    var q = from t in users<br \/>\n            where 40 &amp;lt;= t.Age &amp;amp;&amp;amp; t.Age &amp;lt; 50<br \/>\n            select t;<br \/>\n    var count = q.Count();<br \/>\n    sw.Stop();<br \/>\n    textMsg.Text = $&quot;{count} \u4ef6\u306e\u30c7\u30fc\u30bf\u304c\u3042\u308a\u307e\u3059&quot;;<br \/>\n    textTime.Text = $&quot;{sw.ElapsedMilliseconds} msec&quot;;<br \/>\n}<br \/>\n[\/code]<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2016\/08\/dworkblogimage20160808_04.jpg\" border=\"0\" \/><\/p>\n<p>10\u4e07\u4ef6\u306e\u30c7\u30fc\u30bf\u3092\u691c\u7d22\u3057\u305f\u3068\u3053\u308d\uff08\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306a\u3057\uff09\u3001300 mesc \u3061\u3087\u3063\u3068\u3067\u8fd4\u3063\u3066\u6765\u307e\u3059\u3002<\/p>\n<p>\u30e1\u30e2\u30ea\u306e\u5177\u5408\u306f\u3069\u3046\u304b\u3068\u3044\u3046\u3068\u3001Working set \u306e private \u304c 30 MB \u7a0b\u5ea6\u3002\u3053\u306e\u3068\u304d sample.db \u30d5\u30a1\u30a4\u30eb\u306e\u5927\u304d\u3055\u306f 500MB \u7a0b\u5ea6\u3042\u308b\u306e\u3067\u3001\u30d5\u30a1\u30a4\u30eb\u30a2\u30af\u30bb\u30b9\u3092\u3057\u3066\u3044\u307e\u3059\u3002\u5e74\u9f62\u3067\u691c\u7d22\u3059\u308b\u305f\u3081\u306b clickAge \u3092\u547c\u3073\u51fa\u3057\u305f\u77ac\u9593\u306b HDD \u30a2\u30af\u30bb\u30b9\u304c\u5927\u91cf\u767a\u751f\u3057\u3066\u307e\u3059\u3002<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/www.moonmile.net\/blog\/wp-content\/uploads\/2016\/08\/dworkblogimage20160808_06.jpg\" border=\"0\" \/><\/p>\n<p>\u3068\u306a\u308b\u3068\u691c\u7d22\u30b9\u30d4\u30fc\u30c9\u306f HDD\/SSD \u306e\u30b9\u30d4\u30fc\u30c9\u306b\u4f9d\u308b\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u306d\u3002<\/p>\n<h2>\u30c7\u30fc\u30bf\u4f5c\u6210<\/h2>\n<p>\u30c7\u30fc\u30bf\u4f5c\u6210\u3092\u3059\u308b INSERT \u306f\u610f\u5916\u3068\u9045\u3044\u3067\u3059\u3002\u30ed\u30b8\u30c3\u30af\u304c\u591a\u5c11\u8907\u96d1\u3060\u3068\u3044\u3046\u306e\u3082\u3042\u308b\u3093\u3067\u3057\u3087\u3046\u304c\u30011000\u4ef6\u4f5c\u308b\u306e\u306b7\u79d2\u7a0b\u5ea6\u304b\u304b\u308a\u307e\u3059\u3002\u30aa\u30f3\u30e1\u30e2\u30ea\u306b\u3059\u308b\u3068 300msec \u7a0b\u5ea6\u306a\u306e\u3067 insert \u30b9\u30d4\u30fc\u30c9\u304c 20\u500d\u3050\u3089\u3044\u9055\u3044\u307e\u3059\u3002<\/p>\n<p>[code lang=&#8221;csharp&#8221;]<br \/>\nprivate void clickCreateData(object sender, RoutedEventArgs e)<br \/>\n{<br \/>\n    var cn = new SQLiteConnection(&quot;DataSource=&quot; + db_file); \/\/  &quot;;SyncMode=off;JournalMode=Memory&quot;);<br \/>\n    var context = new DataContext(cn);<br \/>\n    var users = context.GetTable&amp;lt;User&amp;gt;();<br \/>\n    _rnd = new Random();<br \/>\n    int max = int.Parse(textSize.Text);<br \/>\n    var sw = new Stopwatch();<br \/>\n    sw.Start();<br \/>\n    for ( int i=1; i&amp;lt;=max; i++ )<br \/>\n    {<br \/>\n        users.InsertOnSubmit(makeUser());<br \/>\n        if ( i % 100 == 0 )<br \/>\n        {<br \/>\n            context.SubmitChanges();<br \/>\n            Debug.WriteLine($&quot;{i} \u4ef6 \u633f\u5165&#8230;&quot;);<br \/>\n        }<br \/>\n    }<br \/>\n    context.SubmitChanges();<br \/>\n    sw.Stop();<br \/>\n    textMsg.Text = $&quot;{max} \u4ef6\u306e\u30c7\u30fc\u30bf\u3092\u633f\u5165\u3057\u307e\u3057\u305f&quot;;<br \/>\n    textTime.Text = $&quot;{sw.ElapsedMilliseconds} msec&quot;;<br \/>\n}<\/p>\n<p>private User makeUser()<br \/>\n{<br \/>\n    var user = new User();<br \/>\n    user.Id = Guid.NewGuid().ToString(&quot;D&quot;);<br \/>\n    user.UserName = createName();<br \/>\n    user.Email = createEmail(user.UserName);<br \/>\n    user.Birthday = null;<br \/>\n    user.Age = _rnd.Next(10, 100);<br \/>\n    user.Memo1 = createMemo();<br \/>\n    user.Memo2 = createMemo();<br \/>\n    user.Memo3 = createMemo();<br \/>\n    user.Memo4 = createMemo();<br \/>\n    user.Memo5 = createMemo();<br \/>\n    user.Memo6 = createMemo();<br \/>\n    user.Memo7 = createMemo();<br \/>\n    user.Memo8 = createMemo();<br \/>\n    user.Memo9 = createMemo();<br \/>\n    user.Memo10 = createMemo();<\/p>\n<p>    return user;<br \/>\n}<br \/>\nprivate string createName()<br \/>\n{<br \/>\n    \/\/ xxxxxx xxxxxx<br \/>\n    var name = &quot;Aaaaaa Aaaaaa&quot;;<br \/>\n    var ch = name.ToCharArray();<br \/>\n    for (int i = 0; i &amp;lt; ch.Length; i++) {<br \/>\n        if (ch[i] == &#8216; &#8216;) continue;<br \/>\n        ch[i] = (char)(ch[i] + _rnd.Next(26));<br \/>\n    }<br \/>\n    return new string(ch);<br \/>\n}<br \/>\nprivate string createEmail( string username )<br \/>\n{<br \/>\n    \/\/ xxxxxx xxxxxx<br \/>\n    var name = username.Split(&#8216; &#8216;)[0];<br \/>\n    return name + &quot;@mail.com&quot;;<br \/>\n}<br \/>\nprivate string createMemo(int size = 256)<br \/>\n{<br \/>\n    var ch = new char[size];<br \/>\n    for (int i = 0; i &amp;lt; size; i++)<br \/>\n    {<br \/>\n        ch[i] = (char)(&#8216;A&#8217; + _rnd.Next(26));<br \/>\n    }<br \/>\n    return new string(ch);<br \/>\n}<br \/>\n[\/code]<\/p>\n<p>\u6a5f\u4f1a\u3092\u4f5c\u3063\u3066\u3001.NET Core \u306e\u307b\u3046\u306e SQLite \u3082\u8a66\u3057\u3066\u307f\u308b\u3068\u3044\u3046\u3053\u3068\u3067\u3002<\/p>\n<h2>\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9<\/h2>\n<p>\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\u306f\u3053\u3061\u3089<br \/>\n<a href=\"https:\/\/1drv.ms\/u\/s!AmXmBbuizQkXgfsUYttAgWYXnhiogw\">https:\/\/1drv.ms\/u\/s!AmXmBbuizQkXgfsUYttAgWYXnhiogw<\/a><\/p>\n<h2>\u53c2\u8003\u5148<\/h2>\n<p>C# \u3067 SQLite \u3092\u4fbf\u5229\u306b\u4f7f\u3046\u30b5\u30f3\u30d7\u30eb\u30b3\u30fc\u30c9\uff08LINQ to SQLite\uff09 &#8211; \u7fd4\u661f Be \u30e9\u30f3\u30c9\u65e5\u8a18<br \/>\n<a href=\"http:\/\/shinta0806be.ldblog.jp\/archives\/9084539.html\">http:\/\/shinta0806be.ldblog.jp\/archives\/9084539.html<\/a><\/p>\n<p>In-Memory Databases<br \/>\n<a href=\"https:\/\/www.sqlite.org\/inmemorydb.html\">https:\/\/www.sqlite.org\/inmemorydb.html<\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u3068\u6216\u308b\u3068\u3053\u308d\u3067\u3001\u3055\u3089\u3063\u3068\u7b54\u3048\u3066\u3057\u307e\u3063\u305f\u3089\u9593\u9055\u3063\u3066\u3044\u305f\u306e\u3067\u3001\u4ed5\u5207\u308a\u76f4\u3057\u304c\u3066\u3089\u306b\u9032\u5448\u81f4\u3057\u307e\u3059\u3002\u3069\u3046\u3084\u3089\u3001\u6614\u3001\u3069\u3053\u304b\u3067\u30aa\u30f3\u30e1\u30e2\u30ea\u306e\u8a2d\u5b9a\u3067\u4f7f\u3063\u3066\u3044\u3066\u305d\u306e\u77e5\u8b58\u304c\u305d\u306e\u307e\u307e\u3060\u3063\u305f\u3088\u3046\u3067\u3059\u3002\u30d5\u30a1\u30a4\u30eb\u30d9\u30fc\u30b9\u3067\u52d5\u3044\u3066\u3044\u307e\u3059\u306d\u3001SQLite\u306f &hellip; <a href=\"http:\/\/www.moonmile.net\/blog\/archives\/7979\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[88],"tags":[],"class_list":["post-7979","post","type-post","status-publish","format-standard","hentry","category-sqlite"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/7979","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/comments?post=7979"}],"version-history":[{"count":4,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/7979\/revisions"}],"predecessor-version":[{"id":7983,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/posts\/7979\/revisions\/7983"}],"wp:attachment":[{"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/media?parent=7979"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/categories?post=7979"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.moonmile.net\/blog\/wp-json\/wp\/v2\/tags?post=7979"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}